密度泛函理论是一种基态的理论,然而能带结构和带隙属于物质的激发态特性。因此DFT的固有缺点就是会低估带隙能量。这一缺点可以通过不同的方式加以修正。本文介绍两种方法。

(一) DFT+U方法 (以ZnO为例)

氧化锌ZnO的实验带隙能量为3.3eV。 若如学习笔记(三)中,设:

PseudopotentialSet = pseudodojo_pbe

则Octopus 会使用GGA泛函,所得能带结构如下:


带隙能量只有0.79eV,显著低于实验值3.3eV。因此需要进行修正。

DFT+U的基本思路是将局域电子之间的强库伦相互作用写为一项类Hubbard项。 例如,对于ZnO这种过度金属氧化物来说,Zn的电子排布是 1s22s22p63s2sp63d104s21s^22s^22p^63s^2sp^63d^104s^21s22s22p63s2sp63d104s2, 局域电子例如3d电子轨道之间彼此会有很大的重叠,3d电子将会彼此靠近,这将会增强库伦相互作用项到不容忽视的地步,电子关联变得十分重要。而LDA和GGA无法正确描述这种情况。
DFT+U模型将这种相互作用以参数U和J进行描述,这种参数通常是半经验的,这里我们以文献 Phys. Rev. X 5, 011006(2015) 为参考,选定 对于Zn的3d轨道U=12.8eV,O的2p轨道U=5.29eV。
最终,DFT+U修正后的ZnO带隙能量为2.79eV, 虽然仍小于实验值3.3eV,但是相对于GGA已经有了很大改进。

DFTULevel = dft_u_empirical               # 使用DFT+u 来扩展带隙
%Species"Zn" | species_pseudo | hubbard_l | 2 | hubbard_u | 12.8*eV"O"  | species_pseudo | hubbard_l | 1 | hubbard_u | 5.29*eV
%

代码注释: DFTULevel = dft_u_empirical 指定使用经验参数的DFT+U模型进行计算,
DFTULevel =dft_u_none 可设定不使用DFT+U 方法。
hubbard_l 指明 +U 所应用的轨道, 0,1,2,3 即 s,p,d,f 轨道。
hubbard_u 表明所 +U 能量的大小。

(二) metaGGA泛函方法(以金刚石©为例)

同样,金刚石的实验带隙大小约为5.4eV,如果使用 LDA泛函,则 得到带隙仅为 4.2eV, 因此,使用更高阶的泛函 metaGGA 加以修正。 我们将要使用的metaGGA 叫 TB09, 是一种轨道依赖的泛函,它依赖于动能密度,然而在重启信息文件夹 restart 中并没有写入相应信息,所以 按照 上篇 所言的方法会报出致命错误(fatal error).

**************************** FATAL ERROR *****************************
*** Fatal Error (description follows)
*--------------------------------------------------------------------
* For an orbital-dependent functional, all occupied orbitals must be provided.
* Not all the occupied orbitals could be read.
* Please run a ground-state calculation first!
**********************************************************************

这意味这如果我们想要读取gs计算的重启信息来运行unocc计算,这两者需要有相同的波函数, 即k点的数量和态相同。
之前我们计算 gs 基态时,所设k为 :

%KPointsGrid12  |  12  |  7
%
KPointsUseSymmetries = yes

然而进行非占据态unocc计算时,所设k为:

%KPointsPath        #k点扫描路径,见“注1”14 |  10 | 20 | 14 | 14 | 10    #标明各个点之间的路径需要取样几个k点0.0 | 0.0 | 0.0  # Gamma point  #所以有7个点的坐标,只有6段路径需要标明取样点数0.0 | 0.5 | 0.0  # M  point-1/3| 2/3 | 0.0  # K point0.0 | 0.0 | 0.0  # Gamma point0.0 | 0.0 | 0.5  # A point0.0 | 0.5 | 0.5  # L point-1/3| 2/3 | 0.5  # H point
%KPointsUseSymmetries = no    #停止使用对称性

这就是报错的根源。
因此,对于gs计算,应同时加入两种k点取样方法,inp文件应该改为:

CalculationMode =  gs
ExperimentalFeatures = yes
FromScratch = yes
PeriodicDimensions = 3
BoxShape = parallelepiped
ParKPoints = auto
XCFunctional = mgga_x_tb09 + lda_c_pw    # 交换部分设为TB09的metaGGA, 关联部分仍用LDA
FilterPotentials = filter_none                   # 使用势屏蔽,若不屏蔽,该泛函对应的 gs 计算很难收敛a = 3.57*angstrom  #2.527/sqrt(2)
Spacing = 0.2%LatticeParametersa | a | a
%%LatticeVectors0.0 | 0.5 | 0.50.5 | 0.0 | 0.50.5 | 0.5 | 0.0
%
%ReducedCoordinates"C" |   0.0    | 0.0     | 0.0"C" |   3/4    | 3/4     | 3/4
%
nk = 16
%KpointsGridnk | nk | nk
%
%KPointsPath20 |  20 |  300.5 | 0.0 | 0.0  # L point0.0 | 0.0 | 0.0  # Gamma point0.0 | 0.5 | 0.5  # X point1.0 | 1.0 | 1.0  # Another Gamma point
%KPointsUseSymmetries = no

这样, unocc计算的inp文件为:

CalculationMode =  unocc
ExperimentalFeatures = yes
FromScratch = yes
PeriodicDimensions = 3
BoxShape = parallelepiped
ParKPoints = auto
XCFunctional = mgga_x_tb09 + lda_c_pw
FilterPotentials = filter_nonea = 3.57*angstrom  #2.527/sqrt(2)
Spacing = 0.2%LatticeParametersa | a | a
%%LatticeVectors0.0 | 0.5 | 0.50.5 | 0.0 | 0.50.5 | 0.5 | 0.0
%
%ReducedCoordinates"C" |   0.0    | 0.0     | 0.0"C" |   3/4    | 3/4     | 3/4
%
nk = 16
%KpointsGridnk | nk | nk
%%KPointsPath20 |  20 |  300.5 | 0.0 | 0.0  # L point0.0 | 0.0 | 0.0  # Gamma point0.0 | 0.5 | 0.5  # X point1.0 | 1.0 | 1.0  # Another Gamma point
%
KPointsUseSymmetries = no
ExtraStates = 10
ExtraStatesToConverge = 8
output = dos

最终所得带隙能量为4.96eV,比LDA效果好很多。
该方法不只对metaGGA生效,其他的杂化泛函,如果是轨道依赖的泛函,都需要注意这一点。

TDDFT计算软件Octopus学习笔记(四):带隙优化方法相关推荐

  1. TDDFT计算软件Octopus学习笔记(五):介电函数和吸收谱(ZnO)

    本文进行光学性质的计算,以ZnO的介电函数为例.Octopus以时间依赖密度泛函理论(TDDFT)为理论基础,对材料施加一定的外界扰动,通过一定时间的传播,搜集相应的响应数据,进而得出各种光学性质. ...

  2. TDDFT计算软件Octopus学习笔记(三):能带结构(ZnO)

    本文以氧化锌ZnO为例,计算其能带结构.能带结构的计算需要两个步骤,第一步,进行基态(gs)计算,第二步,进行非占据态(unocc)计算. 基态计算的inp文件如下: CalculationMode ...

  3. 敏捷软件开发学习笔记(四)之结构型设计模式

    PHP结构型设计模式 参考 设计模式 PHP 设计模式全集 2018 什么是结构型是设计模式 结构型模式讲的是如何将类和对象按照某种布局组成更大的结构.它分为类结构型模式和对象结构型模式,其中类结构型 ...

  4. pandas学习笔记四:运算方法和运算工具

    1.数值计算和统计基础 import numpy as np import pandas as pd# 基本参数:axis.skipnadf = pd.DataFrame({'key1':[4,5,3 ...

  5. 软件调试学习笔记(四)—— 异常的处理流程

    软件调试学习笔记(四)-- 异常的处理流程 要点回顾 异常的处理流程 实验1:理解调试器与异常的关系 未处理异常:最后一道防线 实验2:理解UnhandledExceptionFilter执行流程 实 ...

  6. 《计算广告》学习笔记(四)

    <计算广告>学习笔记(四) 第七章:数据加工与交易 7.1有价值的数据来源 7.2数据管理平台 7.2.1三方数据划分 7.2.2第一方数据管理平台 7.2.3第三方数据平台 7.3数据交 ...

  7. 【软考中级】软件设计师学习笔记

    软件设计师学习笔记 计算机系统知识 程序语言设计 数据结构 操作系统 软件工程基础知识 结构化开发方法 创建型设计模式 行为型设计模式 结构型设计模式: 算法设计与分析 数据库技术基础 网络与信息安全 ...

  8. 【http学习笔记四】安全篇

    [http学习笔记四]安全篇 文章目录 [http学习笔记四]安全篇 一.HTTPS 与 SSL/TLS ① 什么是安全? 机密性 完整性 身份认证 不可否认 ② 什么是HTTPS? ③ SSL/TL ...

  9. 软件调试学习笔记(三)—— 调试事件的处理

    软件调试学习笔记(三)-- 调试事件的处理 要点回顾 调试事件的处理 实验一:实现简单调试器(创建进程) 实验二:分析异常来源 实验三:实现简单调试器(附加进程) 实验四:分析NtDebugActiv ...

最新文章

  1. ASP.NET MVC中权限控制的简单实现
  2. 通过 Apache Ant 来运行 Tomcat
  3. 多元线性回归中多重共线性_多重共线性如何在线性回归中成为问题。
  4. 在移动端项目中使用vconsole
  5. 【Python】圆周率的计算
  6. html5的常用标签,HTML5常用标签
  7. element-ui下拉框使用value绑定id
  8. step文件查看软件_3D PDF文件转换为step
  9. 太原理工计算机组成原理报告,太原理工计算机组成原理考试题.pdf
  10. Maven中央仓库地址和Nexus 下载地址
  11. 服务器安装linux后一直停留在光标,Ubuntu14更新后无法进入系统卡在光标界面解怎么办?...
  12. 滤波器主要参数及特性
  13. 用友U9产品SOA设计架构遭技术质疑
  14. 连英文都不懂怎么学python_在英语完全不懂的情况下如何学编程?
  15. 上云安全建设之CDN安全防护
  16. 本站视频相关的C++新经典系列书籍出版
  17. 高数中一点导数大于0,能否推出函数在0这个去心邻域单增?
  18. 【STM32H7教程】第94章 STM32H7的SPI总线应用之双机通信(DMA方式)
  19. Android判断当前是不是黑色主题
  20. SoC的ESL建模学习(一)

热门文章

  1. cadence -- allegro和ad9之间的转换
  2. C++ std iostream
  3. Android仿微信首页下拉显示小程序列表
  4. windows程序崩溃调试终极武器
  5. 移动软交换技术在3G核心网中的实现
  6. 【雕爷学编程】Arduino动手做(4)---振动传感器模块
  7. android USB如何修改Serial Number or SN
  8. Linux centos 7 深度学习环境搭建(GPU版)
  9. 编码器-解码器 | 基于 Transformers 的编码器-解码器模型
  10. java 递归查询多级菜单