☰
CO在Pt(111)表面吸附能计算:从Materials Studio建模到VASP实操全流程
2026/10/3 8:00:23 网站建设 项目流程

做表面催化计算的人,第一课十个里有九个是CO在Pt(111)上的吸附。这个体系好在哪?原料简单,CO和Pt都是入门级;计算量可控,一个p(2×2)四层slab才十几个原子;文献数据又多,自己算完能立刻对照判断有没有跑偏。我当年就是从它入坑,后来帮人排查吸附能异常,十有八九也能回到这个体系上找原因。如果你正准备开始VASP吸附计算,这篇就是给你准备的,从Materials Studio建模到VASP输入文件,再到最后算吸附能,整条链路都过一遍,中间穿插的坑都是我自己踩过的。

1. 项目整体设计与计算思路

1.1 为什么选Pt(111)和CO这个组合

Pt基催化剂是燃料电池、尾气净化和石油化工里最常见的材料之一,而CO又是催化反应里最典型的探针分子。研究CO在Pt表面的吸附,既能回答“分子怎么结合在表面上”这个基础问题,也可以延伸到CO氧化、CO耐受性、催化毒化等应用场景。从理论计算的角度看,Pt(111)是一个平整、对称性高的fcc表面,不存在台阶、缺陷这些麻烦因素,非常适合作为第一个吸附计算练习。

我选Pt(111)而不是Pt(100)或Pt(110),原因很简单:稳定面容易收敛,而且文献上关于它的吸附位点、吸附能、振动频率数据都非常充足。你算完atop位(顶位)的吸附能,马上就能和别人的结果比,误差范围基本心里有数。对于初学者,一个“算错了也能马上发现”的体系,比一个炫酷但难收敛的界面要友好得多。

1.2 吸附能的定义和计算框架

吸附能的计算公式其实非常朴素:

E_ads = E(CO/slab) - E(slab) - E(CO_gas)

其中E(CO/slab)是CO吸附以后整个体系的总能,E(slab)是干净表面的总能,E(CO_gas)是孤立CO分子的总能。吸附能为负值表示放热,数值越负说明吸附越强。这个公式的逻辑可以简单类比成“合在一起后的能量”减去“分开时的能量”,差值就是成键释放的能量。

这里的核心问题在于,三个能量必须来自同一套计算设置,特别是平面波截断能ENCUT、交换关联泛函、赝势这三个最关键。如果你用400 eV算吸附体系,却用350 eV算CO分子,那吸附能里就会混入基组不一致的误差。实操中我习惯把它们写在一个表格里,三个能量并列放,算完立即核对。

1.3 整体流程规划

整个流程可以拆成四大步:建模、准备输入文件、跑计算、提取能量。很多人一上来就急着写INCAR,其实建模阶段才是最容易留坑的地方,比如真空层不够、底层原子没固定、原子数对不上,任何一个问题都会直接毁掉后面的结果。

我的建议是严格按这个顺序走:先在Materials Studio里把Pt(111)表面和CO分子建好,导出POSCAR;再分别准备slab、CO气体、吸附体系三个计算任务的输入文件;跑完结构优化以后,从OUTCAR里提取能量,代入公式。整个流程如果顺利,两个工作日能完成;如果中途遇到收敛问题,可能要拖到一周。所以第一步建模一定要仔细,后面的排查会轻松很多。

2. Materials Studio建模实操:从Pt晶体到吸附构型

2.1 导入Pt晶胞并切出(111)表面

打开Materials Studio,通过File菜单下的Import功能导入Pt晶体结构。MS自带的结构库路径一般是Structures目录下的metals分类,里面能找到Pt的晶胞文件,直接双击导入即可。导入后确认一下晶格常数,Pt是面心立方结构,实验晶格常数大约3.92 Å。MS自带模型通常已经优化过,直接用问题不大。

接下来切表面。选中Pt晶胞,在菜单栏选择Build → Surfaces → Cleave Surface,Miller指数设为(1 1 1),这就是(111)面的来源。Cleave之后勾选Build真空层选项,把真空层厚度设置好。这里有个细节:切出的表面层厚度一般设4到5层原子,太薄了电子结构不准确,太厚了计算量又上去了。p(2×2)超胞配4层Pt,一共16个原子,已经能满足大多数吸附能计算的精度需求。

2.2 建立真空层、超胞和消除对称性

切好表面之后,MS会生成一个包含Pt层和真空层的平板模型。真空层厚度我建议至少15 Å,条件允许的话做到20 Å。真空层的作用是隔断周期性镜像之间的相互作用,如果太薄,slab上下表面会隔着真空“看见”彼此,导致能量偏差。你可以理解成把一个房间用厚墙隔开,墙不够厚就总能听到隔壁的声音。

然后通过Build → Crystals → Build Vacuum Slab调整真空层,再通过Build → Symmetry → Make P1消除对称性。这一步非常重要,因为后续要手动固定底层的Pt原子,在带对称性的晶胞里做会出各种奇怪问题。接着在Build → Symmetry → Supercell里把晶胞扩成p(2×2),也就是每个方向都扩大2倍。扩胞以后,每一层Pt原子数从1变成4,这个超胞尺寸足够容纳一个CO分子,又不会让计算量失控。

2.3 固定底层原子与放置CO

固定底层原子是表面吸附计算的常规操作,目的是模拟半无限大的体相:底层原子代表块体环境,不参与表面重构。具体操作是选中底部两层Pt原子,然后通过Modify → Constraints → Fix position把它们的坐标锁死。如果你在MS里设置好约束,导出POSCAR时会自动带上Selective dynamics标志,后面在VASP里也会生效。当然也有人习惯不固定任何原子,认为薄slab全驰豫更合理,但主流做法仍然是固定底部1到2层。

放置CO的时候,先把CO分子建出来。在MS里新建一个空白文档,手动添加C和O原子,C—O键长设为1.15 Å左右,再把CO复制到表面模型里,让C原子对准atop位的Pt原子,高度大约2.0 Å,O朝真空方向。注意CO在金属表面是C端朝下的,千万别放反。放置完以后检查一下C—O键长有没有被MS自动拉伸,我遇到过好多次放完以后键长变成1.4 Å的情况。

2.4 导出VASP结构文件时的坑

MS默认保存格式是.msi,但VASP需要POSCAR格式。导出方法很简单:File → Export,文件类型选VASP,填写文件名即可。这里有两个容易踩的坑。

坑一是POSCAR里的原子顺序。MS导出的POSCAR通常按照元素种类分行排列,但有时原子顺序和POTCAR里的顺序对不上,导致VASP报错或原子种类错乱。我每次导出后都会用VESTA打开检查一遍,确认第一个原子是Pt还是C。坑二是坐标精度。MS导出时坐标默认保留小数点后几位,有时候精度不够会导致结构优化起点很差。我一般会用VESTA把POSCAR重新读入再另存一遍,顺便看看周期性盒子和原子坐标是否合理。记住一句话:VASP输入结构出现问题的时候,90%都是建模阶段和格式转换阶段埋的雷。

3. VASP输入文件逐项配置

3.1 POSCAR、POTCAR、KPOINTS的准备

POSCAR是结构文件,包含了晶格矢量、元素种类、原子数和原子坐标。以p(2×2)四层Pt加一个CO为例,POSCAR应该是这样的:第一行是注释,第二行是晶格缩放系数,下面三行是晶格矢量,接着元素种类和原子数,最后是原子坐标和是否固定的标志。

POTCAR需要按元素顺序拼接。如果POSCAR里的原子顺序是Pt在前、C和O在后,那么POTCAR就必须是Pt的POTCAR、C的POTCAR、O的POTCAR依次拼接起来。在Linux终端里可以用cat命令实现,但要注意必须按顺序。很多新手在这里栽跟头,POTCAR顺序和POSCAR不一致,VASP直接崩溃,而且报错信息还不太明显。

KPOINTS对于slab体系,一般采用Monkhorst-Pack网格。p(2×2)超胞我通常用4×4×1,这个密度对吸附能足够。记住第三个方向必须是1,因为真空层方向不能做周期性K点采样。CO气体分子的计算则用Gamma点即可,毕竟盒子已经足够大。

3.2 INCAR参数的选择逻辑

INCAR是整个计算的灵魂。我以一个典型的表面结构优化任务为例,给出参数表:

参数推荐值说明
SYSTEMCO/Pt111仅作注释,随便写
PRECNormal精度档位,入门用Normal足够
ENCUT400平面波截断能,单位eV
EDIFF1E-6电子步收敛标准
EDIFFG-0.02离子步受力收敛标准,单位eV/Angstrom
IBRION2共轭梯度优化算法
ISIF2只优化原子,不改变晶格和体积
ISMEAR1金属体系用Methfessel-Paxton
SIGMA0.1展宽宽度
ISPIN2开自旋极化
LREALAuto实空间投影,加速计算
NELM200电子步最大循环数

逐项解释一下几个最关键的选择。ENCUT设400 eV是比较保守的做法,对Pt的PAW势来说足够;如果你用更硬的赝势或需要更精确的能量,可以用POTCAR里ENMAX的1.3倍做截断能测试。ISMEAR=1是金属体系的标配,因为slab有连续的电子态,用ISMEAR=0会很难收敛;SIGMA=0.1 eV是常用值,既保证总能准确又不至于过渡展宽。

ISIF=2这个参数很多人容易忽略。表面吸附计算时晶格常数应该固定,只让原子弛豫。如果你不小心设成ISIF=3,VASP会优化晶格,slab的盒子和真空层厚度都会被改掉,整个模型就废了。ISPIN=2之所以默认打开,是因为Pt的slab表面可能存在自旋极化,尤其是薄slab,小心驶得万年船。

3.3 三个计算任务的安排

第一个任务优化干净Pt(111)slab。用MS导出的结构,INCAR按上面表格设置,运算完以后会得到平衡的slab结构,记下总能E(slab)。第二个任务优化孤立CO分子,把CO放在一个15×15×15 Å的立方盒子里,KPOINTS用Gamma点,INCAR里ISMEAR=0,SIGMA=0.05,因为分子没有金属性的连续电子态,必须用Gaussian展宽。第三个任务做CO吸附在slab上的结构优化,此时将第一个任务优化后的CONTCAR复制为POSCAR,把CO分子加在表面,固定底层原子不变,继续优化。

这里有个小技巧:如果是拿CONTCAR续算,记得把POSCAR里的坐标换成新的初始结构,并保留Selective dynamics标志。我早期经常忘记把CONTCAR复制成POSCAR,结果拿着原来slab的结构跑吸附计算,半天后发现原子根本没动,白白浪费机时。

4. 吸附能计算与结果判读

4.1 从输出文件里提取能量

计算完成后,能量在OUTCAR里。推荐用grep命令搜索energy(sigma->0),这个值代表展宽修正后的总能,比直接看TOTEN更准确。ISMEAR=1的情况下,TOTEN里包含熵贡献的修正项,直接用TOTEN会引入误差,所以要用不带熵的那个能量。

举个例子,三组计算完成后,你的数据表应该长这样:

体系energy(sigma->0) (eV)
CO/Pt(111)-140.356
Pt(111) slab-126.912
CO gas-12.514

代入吸附能公式:E_ads = -140.356 - (-126.912) - (-12.514) = -0.93 eV。注意,负号代表放热吸附,所以写成E_ads = -0.93 eV。这个数值量级是比较合理的。如果你算出来是正值或者负得特别离谱,先别急着分析,检查一下能量有没有提取错,原子数是不是对的上。

4.2 结果合理性检验

算完吸附能之后,还要检查吸附构型是否合理。打开CONTCAR或直接用VESTA可视化,重点看三件事。

一是C—Pt键长。CO化学吸附在atop位时,C到顶层Pt的距离一般在1.85到2.05 Å之间。如果你看到2.5 Å以上,说明CO没有真正吸附上去,可能只是停留在物理吸附状态。二是C—O键长。气相CO的平衡键长约1.14 Å,吸附之后由于金属的反向键作用,C—O键会被稍微拉长到1.17到1.19 Å左右,这是σ供电子和π反馈键共同作用的结果。三是CO分子的取向,正常化学吸附应该是C朝金属、O朝真空,结构优化后应该基本保持竖直。

另外,结构优化完成后看受力是否真的收敛到EDIFFG以下。VASP在终止时会在OUTCAR里输出力和能量信息,如果最大力还比设定值大很多,说明优化没收敛就被你停了,这个结构不可用。

4.3 位点间的能量比较与泛函局限

CO在Pt(111)上可以吸附在很多位点:atop(顶位)、bridge(桥位)、fcc空洞位、hcp空洞位。做吸附能计算通常要穷举这些位点,算完以后比较哪个位点最稳定。实验上认为atop位最稳定,但这里有个著名的DFT现象:PBE泛函往往会过度稳定高配位吸附,有时算出来hcp或fcc位和atop位能量差很小甚至在误差范围内。这不代表你的计算做错了,而是泛函的固有偏差。如果想改善位点偏好,可以试试hybrid泛函或者加DFT-D3色散修正,代价是计算时间成倍增加。

作为第一课,我建议先只算atop位,把流程跑通,然后再扩展到其他位点。等几个位点都算完,你就能画出一张能量对比图,这是典型的吸附构型能量排序图,后续写文章、做汇报都能用到。

5. 常见问题与排查技巧实录

5.1 Materials Studio许可与结构导出问题

热词里出现频率很高的“系统无法解析主机名称”“连不上许可服务器”,基本是MS的License连接问题。最典型的情况是公司或实验室的电脑改了主机名,或者License Server的IP地址变了,客户端仍然用旧的计算机名去连服务。解决方法一般是打开License Manager,重新指定正确的服务器地址,检查防火墙是否放行了许可服务端口。这个问题和计算本身没太大关系,但它卡住你的时候,你连MS都打不开,更别说建模了。如果只是偶尔一次,我一般建议先重启License服务,不行再检查hosts文件里计算机名和IP的对应关系。

另一个高频问题是用MS导出POSCAR失败。有些老版本MS导出的POSCAR格式不够标准,VASP读入会报错。我的习惯是导出后立刻用VESTA打开检查,实在不行就用MS导出CIF格式,再用VESTA转成POSCAR。VESTA在这个转换链里简直是标准答案,强烈建议所有做计算的人常备。

5.2 不收敛、磁矩异常和能量“跳崖”

结构优化不收敛,大概可以分两类。一类是电子步不收敛,表现是SCF循环跑到NELM上限还是不停止,常见原因是ISMEAR和SIGMA设置不合理,或者初始磁矩设置有问题。Pt的slab最好在INCAR里检查一下初始磁矩,必要时用MAGMOM参数手动给出合理的初始自旋分布。另一类是离子步不收敛,表现是能量在几个值之间来回震荡。我常用的办法是先降低EDIFFG的严格程度,用-0.05粗驰豫,收敛后再用-0.02细驰豫;或者把IBRION改成1(最陡下降法)跑几步,结构差不多稳定后再换回IBRION=2。

能量“跳崖”通常指能量在某一离子步突然变化很大,绝大多数时候是原子重叠了。检查POSCAR里初始的C—Pt距离是不是太近,一般不要小于1.7 Å,否则初始结构在优化第一步就会因为原子间力太大而乱飞。

5.3 吸附能数值对不上文献怎么办

新手最容易遇到的问题就是:算出来atop位吸附能和文献差了几百meV,然后开始怀疑人生。我建议按下面这个顺序排查。

先查原子数和结构。slab和吸附体系的坐标里有没有多原子、少原子?真空层是否足够厚?是不是忘了固定底层原子,导致优化后slab结构发生了变化?再查K点密度。p(2×2)超胞用4×4×1和6×6×1算出来的吸附能可能差50到100 meV,文献里用的网格也不一样,对比时要看清。接着查能量取值。是不是用了TOTEN而不是energy(sigma->0)?两个值之差在金属体系里可能超过30 meV。最后查泛函。文献用RPBE、PBE、PW91、甚至加了vdW修正,都会导致结合能不同。我见过不少“对不上”的案例,最后发现是对比的文献用了RPBE,而自己用了PBE,两个泛函差了0.3 eV都不奇怪。

有个经验值可以参考:PBE算CO在Pt(111)上的吸附能通常比实验吸附热要高一些,atop位大概在-1.5到-1.9 eV范围内,RPBE会低一些,更接近实验。所以不要只看一个绝对值,要看相对趋势和构型合理性。

5.4 给初学者的几条实在建议

第一,每次计算前把项目目录命名清楚,slab、CO_gas、CO_slab分开建文件夹,输出文件不会搞混。第二,把三个体系的能量记在一个本子上(我习惯用Excel),标好计算日期、参数、能量值,方便复查。第三,结构优化完成后第一时间用VESTA看构型,不要只盯着能量数字。第四,对于吸附能的误差来源要有心理预期,不同K点、不同截断能、不同泛函带来的差异很容易超过100 meV,所以做对比时一定要控制变量。

我个人在实际操作中还有一个土办法:把最终优化好的CONTCAR复制成POSCAR,再以这个结构做一次高精度单点能计算(把EDIFF降低到1E-7,关闭离子步),用来确认吸附能数值是稳定的。这个小步骤会多花一点时间,但能帮你过滤掉很多因为结构未完全收敛导致的能量小波动,尤其是后续你要拿这个吸附能去做能垒、做微观动力学分析时,这一步省不得。

CO在Pt(111)上的吸附只是表面计算的开胃菜。建完模、跑通这项计算之后,后面的路就很好走了:换吸附位点、算差分电荷密度、画态密度、算Bader电荷,甚至开始扫反应路径。下一篇我打算写差分电荷密度和态密度怎么做,那是在吸附能之后大家最常用的两个分析手段,也是写文章/汇报时最有说服力的图。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询