荧光光谱的理论计算
一、荧光光谱的原理
分子吸收紫外线等入射光,从电子基态S0的ν=0振动能级跃迁到S1的某些ν>0能级,然后振动弛豫失去一部分能量而降至S1的ν=0能级。也可能被激发到更高的激发态,如S2等,当S2的较低的振动能级与S1的较高振动能级能量相当或重叠时,分子则可能以无辐射方式从S2过渡到S1,这称为内转换(internal conversion, IC)。如果周围介质碰撞不足以吸收电子激发能,分子从S1的ν=0能级降至S0的某些ν>0能级便产生荧光,可用如下简化的Jablonski能级图表示。简言之,从S1到S0的电磁辐射,即为荧光。Kasha’s rule指出,荧光是最低激发态到基态的发射,因此发射光的波长与激发光的波长是无关的。实际上也会有少数情况违反Kasha规则,例如S2难以通过内转换到S1态的情形等等。
简化的Jablonski能级图
from Wikipedia
二、荧光光谱的特征
由于分子需要能过激发才能产生发射过程,因此,常常将激发和发射光谱绘制在一起。荧光光谱有如下特征:
(1) Stokes位移
荧光发射波长总是比相应的吸收光谱的波长长,称为Stokes位移,如下图所示。
从以下势能面可以看出,由于振动弛豫损失了能量以及基态结构与激发态结构之间的差异,会导致发射能小于激发能。此外,处理激发态的分子由于与溶剂分子的弛豫作用也会使能量损失,这些原因导致了Stokes位移。
(2) 镜像对称
荧光发射光谱与吸收光谱之间常常存在近似的镜像关系,不完全对称。这是因为吸收光谱的形状取决于S1的振动能级结构,而发射光谱的形状取决于基态的振动能级,两者往往比较相似。
(3) 荧光发射光谱的形状与激发波长无关
这是原理部分提到的Kasha规则造成的。
三、计算方法与实例
对激发态不熟的同学可以参看《激发态计算入门》和《激发态计算中的溶剂效应》两篇文章。知道了荧光产生的原理,便可知道荧光的计算方法,一般来说有以下两种方法。第一种方法步骤少,原理不是十分严格,但结果一般都可以使用;第二种方法比较严格,但计算比较复杂,结果比较准确。以下以环己烷溶液中的香豆素153分子为例,说明荧光的两种计算方法。分子结构如下:
方法一:
(1) 优化溶液中的基态结构:
%chk=c153.chk
# opt freq pbe1pbe/6-311G** scrf=(solvent=cyclohexane)
Coumarin anti GS opt freq
0 1
C 4.02727400 -1.38700800 0.09075400
C 1.89144200 -0.14342800 -0.02169200
C 1.16436700 -1.36387200 -0.11360600
C 1.92248700 -2.65487300 -0.21330500
C 3.20484300 -2.55413800 0.59966600
C 1.19378500 1.07976500 0.05029000
C -0.20510400 -1.34111600 -0.09585700
C -0.92996000 -0.14149500 -0.01759200
C -0.18855600 1.05097100 0.04926200
C -2.18088800 2.40360500 0.14484400
C -2.95651400 1.18753700 0.07895400
C -2.34946100 -0.01833100 0.00199500
H 4.45669600 -1.62571800 -0.89296100
H 3.79793000 -3.46950500 0.52990300
H -0.73598300 -2.28402400 -0.14997800
H -4.03081400 1.29971100 0.09376400
C 4.04525100 1.05493700 -0.01772800
H 4.94831700 0.85616100 -0.60472200
H 4.37468300 1.28844000 1.00546800
C 3.28170400 2.22423100 -0.60435800
H 3.88329400 3.13201400 -0.51357800
H 3.11132700 2.05033800 -1.67231100
C 1.94561400 2.37771100 0.10687600
H 2.11051200 2.67293800 1.15122500
H 1.35038300 3.17363300 -0.34379800
N 3.25336800 -0.16138700 -0.00700300
O -0.80971700 2.26147500 0.13063200
O -2.62931400 3.52162700 0.21210600
C -3.20163200 -1.26265200 -0.06645600
F -2.94696700 -2.08952100 0.96503100
F -2.96545600 -1.95781900 -1.19488100
F -4.51156700 -0.99255400 -0.03865200
H 2.95905400 -2.40128500 1.65606300
H 4.86900300 -1.19433300 0.76521300
H 2.17496000 -2.86206900 -1.26183700
H 1.29731200 -3.48342600 0.12889100
(2) 计算吸收谱。在(1)优化得到的结构上做TD计算:
%chk=c153.chk
#p pbe1pbe/6-311G** td(nstates=20) scrf=(solvent=cyclohexane) geom=allcheck guess=read
计算得到的结果为3.28eV,实验值为3.22eV。
(3) 优化S1的结构
%chk=c153.chk
#p opt pbe1pbe/6-311G** td scrf=(solvent=cyclohexane) geom=allcheck guess=read
此时,以结构优化的最后一步的S0→S1的激发能作为近似的荧光发射能。计算结果为2.88 eV,实验值为2.26 eV(实验值在乙醇中测得)。
事实上,由于在使用默认的线性响应模型优化激发态结构时,使用的是平衡溶剂,所以这个过程并不符合荧光的标准定义[EEES(REES,eq)−EGS(REES,neq)],但一般可直接用此结果。需要注意的是,此时不能再以S1的平衡结构做TD单点计算,获得S0→S1的激发能,因为此时基态为平衡溶剂、激发态为非平衡溶剂,与实际情况刚好相反,误差会比较大。笔者尝试计算了此过程,结果也是2.88 eV,这个例子不是个很好的反例。
方法二:
基于态特定溶剂模型进行计算,这是高斯手册中给出的标准计算方法。
(1) 优化溶液中的基态结构,输入文件同方法一中的第(1)步。
(2) 态特定模型下的吸收光谱计算,分两步完成:
(2-1) 基态的单点能计算,同时保存基态的非平衡溶剂信息:
%chk=c153.chk
#p pbe1pbe/6-311G** scrf(solvent=cyclohexane,noneq=save) guess=read geom=allcheck
(2-2) 以基态结构做TD计算,读取上一步保存的溶剂信息:
%chk=c153.chk
#p pbe1pbe/6-311G** td scrf(solvent=cyclohexane,noneq=read,externaliteration) guess=read geom=allcheck
取(2-2)的After PCM corrections后面的能量与(2-1)的SCF Done后面的能量相减,得激发能,结果为3.15 eV。
(3) 用线性响应模型优化激发态的几何结构,同方法一的第(3)步:
%chk=c153.chk
#p opt pbe1pbe/6-311G** td scrf=(solvent=cyclohexane) geom=allcheck guess=read
(4) 态特定模型下的荧光发射光谱计算,分两步完成:
(4-1) 在激发态的平衡结构下做TD计算,得到激发态的能量,并写将溶剂信息写入chk文件:
%chk=c153.chk
#p pbe1pbe/6-311G** td scrf(solvent=cyclohexane,noneq=write,externaliteration) guess=read geom=allcheck
(4-2) 在激发态的平衡结构下做基态计算,得到非平衡溶剂下的基态能量,读入上一步的溶剂信息。
%chk=c153.chk
#p pbe1pbe/6-311G** scrf(solvent=cyclohexane,noneq=read) guess=read geom=allcheck
最后两步所得能量相减,即为荧光发射能,严格符合荧光的定义,结果为2.73 eV。
注意:高斯手册中一共7步,相比上述过程,在优化完基态结构后,多一步用线性响应构型计算吸收谱,这一步是为了确定S1是第几个root,一般情况下都是第一个态,因而无需做这一步。此外在Exploring chemistry with electronic structure methods (3 ed)的第374页的表中给出了以上计算过程,但是最后一步写成了TD计算,这是一个很严重的笔误!
参考资料:
[1] 李炳瑞,结构化学(第二版),高等教育出版社
[2] 方惠群,于俊生,史坚,仪器分析,科学出版社
[3] J. B. Foresman and Æ Frisch, Exploring Chemistry with Electronic Structure Methods, 3rd ed
- 【死磕Java并发】—– J.U.C之AQS:CLH同步队列
- 使用Python完成你的第一个学习项目
- CA,给了数据库,给了机器,为啥也扩不了容?
- 如何使用Anaconda设置机器学习和深度学习的Python环境
- MQ,互联网架构解耦神器
- 预测随机机器学习算法实验的重复次数
- 服务化了,没想到耦合更加严重?
- 如何在Python中扩展LSTM网络的数据
- 使用Keras的Python深度学习模型的学习率方案
- 全球电脑手机无一幸免,英特尔CPU“漏洞事件”到底多严重?
- 评估Keras深度学习模型的性能
- Python机器学习的练习二:多元线性回归
- 熔断器 Hystrix 源码解析 —— 命令合并执行
- Python机器学习的练习一:简单线性回归
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Flutter为什么使用Dart?
- Flutter中如何使用WillPopScope
- 谈谈我对 Flutter 发展前景 和 “嵌套地狱” 的浅显看法
- 超过百万的StackOverflow Flutter 问题-第二期
- Flutter Flow实现半圆弹出菜单
- 【Flutter实战】自定义滚动条
- vue.config.js的优化配置(element-ui, echarts, lodash按需加载 )
- Flutter “孔雀开屏”动画效果
- Flutter 使用Navigator进行局部跳转页面
- Flutter 动画鼻祖之CustomPaint
- 【Flutter实战】Flutter 中那么多组件,难道要都学一遍?
- 【Flutter组件终结篇】332个组件 658页PDF
- Kubernetes在pod中配置hosts解析域名
- 【Flutter 实战】简约而不简单的计算器
- Flutter 中渐变的高级用法