晶体轨道重叠布居 COOP(crystal orbital overlap population)的一个更为直观的名称是 重叠布居权重的态密度 (overlap population-weighted density of states)。在利用LCAO思想求解单电子薛定谔方程时,会出现一个耦合项2c1c2S12 ,它是和相互作用有关的量,称为重叠布局(overlap population)。如果 c1c同号,则重叠布居为正值(即成键),如果 c1c异号,则它为负值(即反键)。重叠布居乘以相应的态密度,就可以得到重叠布居权重的态密度,简称 COOP。COOP可以很好的研究周期性体系中的局域化学键性质,在上个世纪配合semiempirical extended Huckel (EH) theory取得了巨大的成功。但是COOP还是存在一些问题:COOP计算有很强的基组依赖性;在EH的理论框架下,如果研究p-p和d-d相互作用,由于原子轨道的空间延展方向,会有一定问题。
         随着基于平面波基组的第一性原理计算的发展,COHP方法诞生,在1993年由Richard Dronskowski和Peter E.Blochl共同发表。COHP 的原理在 Richard1993 的文章中有详细的推导,其主要公式如下:

简单来说,COHP和COOP的区别就是把原本的OP重叠矩阵替换成了HP哈密顿矩阵,且同样要乘以一个DOS矩阵。所以,

COOP is weighted by the elements of the overlap matrix.

COHP is weighted by the elements of the Hamiltonian matrix.

以上内容总结自链接[1],以及Dronskowski和Blochl的93年文献。其中附带的参考书目/文献如下:

参考书目:Roald Hoffman-Solids and Surfaces_ A Chemist’s View of Bonding in Extended Structures (1988).

参考文献:J. Phys. Chem. 1993, 97, 8617-8624;J. Phys. Chem. A 2011, 115, 5461-5466;J. Comput. Chem. 2016, 37, 1030-1035.

利用VASP做COOP分析实际上是通过PROOUT来实现的。而实现的具体过程有两种:一种是自己写脚本,另一种是借助已有的程序。但是PROOUT的数据结构是还是挺复杂的,自己写脚本原则上也能实现,但会非常耗时,好在Dronskowski教授课题组已经开发出Lobster了(下一节具体介绍),所以,COOP/COHP(上)-PROOUT,贫僧重点介绍PROOUT的数据格式,因为在这样的数据格式基础上我们可以结合Lobster实现一些新的想法。在VASP5.4.4及以上版本中,PROOUT的产生是由INCAR中的开关LORBIT=5控制的,即

5 required DOSCAR and PROOUT

它总共由以下7部分构成:

PROOUT
# of k-points: 60 # of bands: 16 # of ions: 2
1 1 2
1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000
...........................................................................................
0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
0.000 0.000 0.000 0.000 0.000 0.000
-0.669001 0.196515 -0.000000 0.000000 0.000000 -0.000000 0.000000 -0.000000 0.000000
-0.000000 0.000000 0.000000 0.101749 -0.029888 0.000000 0.000000 0.000000 -0.000000
-0.000000 -0.000000 0.000000 -0.000000 0.483946 0.231050 -0.000000 0.000000 -0.000000
-----------------------------------------------------------------------------------------------------------
0.000000 -0.000000 -0.000000 0.202237 -0.138402 -0.000000 -0.000000 0.000000 0.000000
0.000000 0.000000 -0.000000 -0.000000 0.161982 -0.040483 -0.000000 -0.000000 -0.000000
-0.000000 -0.000131 0.000046 0.000000 -0.000000 0.000086 0.000001 -0.000000 0.000000
augmentation part
-0.028726 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
-0.028726 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
-0.000000 0.000000 0.021496 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
---------------------------------------------------------------------------------------------------------
-0.063291 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
-0.000000 0.000000 0.004777 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
-0.000000 0.000000 0.004777 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
 

在VASPwiki或手册中说明如下:

line 1: PROOUT
line 2: Number of kpoints, bands and ions
line 3: Twice the number of types followed by the number of ions for each type
line 4: The Fermi weights for each kpoint (inner loop) and band (outer loop)
line 5: Real and imaginary part of the projection P N l m n k {\displaystyle P_{{Nlmn{\mathbf {k}}}}}
for every lm-quantum number (inner loop), band, ion per type, kpoint and ion-type (outer loop)
below : Augmentation part
last line: The corresponding augmentation part of the projections for every lm-quantum number (inner loop),
ion per type, ion-type, band and kpoint (outer loop)
This information makes it possible to construct e.g. partial DOS projected onto bonding and anti-bonding
molecular orbitals or the so-called coop ( crystal overlap population function).

前两行容易,也就是:第1行表示PROOUT的名称,第2行表示K点数,能带数以及原子数。第3行就不是那么容易理解了。什么叫两遍原子类型数之后还跟着每种原子类型的原子数呢?这个其实已经意译了,直接翻译可能会非常别扭。,结合石墨烯的数据 1 1 2,也很难看懂。实际上它的真正含义是,第1遍原子类型是总的类型数,第2遍原子类型数则是序数,然后每1种类型后紧跟着原子数目,这样理解后,1 1 2就不难理解了:1 代表石墨烯晶格总的原子类型只有一个C,当然总数是1,后面是第1种原子类型C,接下来元胞中碳原子数有两个,所以紧跟着2。假如现在我们模拟BN呢,格式应该就是:2 1 1 2 1,即总类型数为2,第1种类型原子数为1个,第2种类型的原子数为1。第4行理解起来也不困难,就是每个k点和每条能带的权重,需要注意的是外层循环遍历每条能带,内存循环遍历每个k点,也就是说,按顺序统计的话,从1到60个k点都属于第1条能带,从61到120都属于第2条能带,依次类推,直到遍历完第16条能带中的60个k点。

第5行其实是最重要的,这部分包含两层大循环,内层大循环涉及轨道量子数的实部和虚部,外层大循环涉及能带数,每个离子类型包含的离子数,k点数以及离子类型数目。具体顺序从手册上是无法看出来的,但是我们可以从VASP源码中的sphpro.F看得出来,具体操作如下:

$ grep -r "PROOUT"
main.F: & ' LORBIT = ',I6, ' 0 simple, 1 ext, 2 COOP (PROOUT), +10 PAW based schemes'//)
sphpro.F:! write header fo file PROOUT
sphpro.F: WRITE(STR,'(A,I1)') "PROOUT.",ISP
sphpro.F: WRITE(IUP+ISP-1,*) 'PROOUT'
$ grep -A 5 "PROOUT" sphpro.F
! write header fo file PROOUT
IF (LORBIT==5) THEN
DO ISP=1,WDES%NCDIJ
WRITE(STR,'(A,I1)') "PROOUT.",ISP
OPEN(UNIT=IUP+ISP-1,FILE=DIR_APP(1:DIR_LEN)//STR,STATUS='UNKNOWN')
ENDDO
DO ISP=1,WDES%NCDIJ
WRITE(IUP+ISP-1,*) 'PROOUT'
WRITE(IUP+ISP-1,3200) WDES%NKPTS,WDES%NB_TOT,T_INFO%NIONP
WRITE(IUP+ISP-1,'(9I4)') T_INFO%NTYPP,T_INFO%NTYP,(T_INFO%NITYP(I),I=1,T_INFO%NTYPP)
WRITE(IUP+ISP-1,'(9F7.3)') ((W%FERTOT(NB,NK,MIN(ISP,WDES%ISPIN)),NK=1,WDES%NKPTS),NB=1,WDES%NB_TOT)
ENDDO

这个输出的格式,包含了两部分信息,首先是文件名称,其次数据格式。名称中有几个标志性的词语可以让我们简单识别大致他们在输出数据的对应关系,例如上面三处标有黄色的字体,第一个是COOP,据此可以知道PROOUT的功能,然后在文件命名方面,有个后缀ISP,这个和INCAR里面的ISPIN可以对应起来,也就是和自旋相关,默认情况下ISPIN=1,所以,在运行完文件后就会出现PROOUT.1这个文件,倘若我们在INCAR中设置了ISPIN=2,自然就会再出现一个PROOUT.2。一开始,我对这个也比较不太理解,但后来看了新浪博客才知道的:The PROOUT file (LORBIT=2) contains the projection of the wavefunctions onto spherical harmonics centered at the position of the ions P(Nlmnk )(波函数在球谐函数上的投影) and the corresponding augmentation part. This information can be used to construct e.g. the partial DOS projected onto molecular orbitals or the so-called coop (crystal overlap population function). 注意, 会生成两个PROOUT文件,one for spin up (PROOUT.1) and one for spin down (PROOUT.2). 对自旋非极化计算只生成PROOUT.1。

接下来的WDES%NKPTS,WDES%NB_TOT以及T_INFO%NIONP可以让我们不必费事寻找具体代码段就能知道它分别代表的意义,其中的3200是这样的一个格式:

3200 FORMAT('# of k-points:',I5,9X,'# of bands:',I5,9X,'# of ions:',I5)

与前面的数据文件正好能很好对应,后两行则类似理解。现在回到前面的疑问,看看刚才探讨的两层大循环各有怎样的对应:

先看白色部分,显然外层大循环包含四个亚层小循环,从外往内依次是:type of ion, Kpoints, number of ion, 以及 bands。再看黑色部分,显然角量子数依次都写入文件了,但实部和虚部并不明确,所以,有必要对CSUM这个数组需要更进一步了解一下:

 original statements
! SUMR=SUMR+WORKR(K)*NONL_S%QPROJ(K,LMS,1,1)
! SUMI=SUMI+WORKI(K)*NONL_S%QPROJ(K,LMS,1,1)
SUMR=SUMR+WORKR(K)*NONL_S%QPROJ(K,LMS,1,1,ISPIRAL)
SUMI=SUMI+WORKI(K)*NONL_S%QPROJ(K,LMS,1,1,ISPIRAL)
!-MM- end of alterations
ENDDO
CTMP=GREAL(CMPLX(SUMR,SUMI,KIND=q)*NONL_S%CQFAK(LMS,1)*CGDR)
CSUM(LMS,ISP+ISPINOR)=CTMP

从这里看就已经特别清楚了:实部和虚部是一起写入的,并且实部在前,虚部在后。至此,PROOUT文件的第5行才算完全弄清楚了。后面第6行“Augmentation part”实际上可以看做第7行的提示符,而第7行的数据格式与第5行是一个意思,只是没有实部和虚部区分而已。至此,PROOUT的数据格式与意义就算解读完了,网络上关于PROOUT的资料太少,费了九流二虎之力也就搜到后面的几个零碎的链接,有些还不是和PROOUT直接相关,有问题的童鞋们可以来博客园里来提问。

参考链接:

[1] 基于VASP的COOP和COHP的基本原理;COOP和COHP简单原理;VASP-COHP问题

[2] vasp中影响并行效率的三个变量KPAR,NPAR,NCORE;LOBSTER-COHP使用;LORBIT

[3] 关于RWIGS与LORBIT;电子定域性的图形分析;linux-查找某目录下包含关键字内容的文件

[4] 设置了LORBIT和RWIGS却没有PROOUT文件输出;vasp中怎样可视化原子轨道;PROOUT

COOP/COHP(上)-PROOUT的更多相关文章

  1. Asp.Net Mvc 使用WebUploader 多图片上传

    来博客园有一个月了,哈哈.在这里学到了很多东西.今天也来试着分享一下学到的东西.希望能和大家做朋友共同进步. 最近由于项目需要上传多张图片,对于我这只菜鸟来说,以前上传图片都是直接拖得控件啊,而且还是 ...

  2. [APUE]进程控制(上)

    一.进程标识 进程ID 0是调度进程,常常被称为交换进程(swapper).该进程并不执行任何磁盘上的程序--它是内核的一部分,因此也被称为系统进程.进程ID 1是init进程,在自举(bootstr ...

  3. 关于解决python线上问题的几种有效技术

    工作后好久没上博客园了,虽然不是很忙,但也没学生时代闲了.今天上博客园,发现好多的文章都是年终总结,想想是不是自己也应该总结下,不过现在还没想好,等想好了再写吧.今天写写自己在工作后用到的技术干货,争 ...

  4. PHP搭建大文件切割分块上传功能

    背景 在网站开发中,文件上传是很常见的一个功能.相信很多人都会遇到这种情况,想传一个文件上去,然后网页提示"该文件过大".因为一般情况下,我们都需要对上传的文件大小做限制,防止出现 ...

  5. 深入浅出Redis-redis底层数据结构(上)

    1.概述 相信使用过Redis 的各位同学都很清楚,Redis 是一个基于键值对(key-value)的分布式存储系统,与Memcached类似,却优于Memcached的一个高性能的key-valu ...

  6. jquery.uploadify文件上传组件

    1.jquery.uploadify简介 在ASP.NET中上传的控件有很多,比如.NET自带的FileUpload,以及SWFUpload,Uploadify等等,尤其后面两个控件的用户体验比较好, ...

  7. 在传统.NET Framework 上运行ASP.NET Core项目

    新的项目我们想用ASP.NET Core来开发,但是苦于我们历史的遗产很多,比如<使用 JavaScriptService 在.NET Core 里实现DES加密算法>,我们要估计等到.N ...

  8. .NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布

    众所周知,Red Hat和微软正在努力使.NET Core成为Red Hat企业版Linux (RHEL)系统上的一流开发平台选项.这个团队已经一起工作好几个月了,RHEL对.NET有许多需求.今天在 ...

  9. Windows 7上执行Cake 报错原因是Powershell 版本问题

    在Windows 7 SP1 电脑上执行Cake的的例子 http://cakebuild.net/docs/tutorials/getting-started ,运行./Build.ps1 报下面的 ...

  10. 【AutoMapper官方文档】DTO与Domin Model相互转换(上)

    写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...

随机推荐

  1. .net redis 发布订阅demo

    发布者: using StackExchange.Redis;using System; namespace publish{ class Program { static void Main(str ...

  2. vue-cli 更新遇到的问题,卸载不掉旧版本2.9.6(可行)

    今天更新vue-cli时,遇到问题:卸载不掉旧版本2.9 官网给的信息是:Vue CLI 的包名称由 vue-cli 改成了 @vue/cli. 如果你已经全局安装了旧版本的 vue-cli (1.x ...

  3. 【深入浅出 Yarn 架构与实现】4-6 RM 行为探究 - 申请与分配 Container

    本小节介绍应用程序的 ApplicationMaster 在 NodeManager 成功启动并向 ResourceManager 注册后,向 ResourceManager 请求资源(Contain ...

  4. 自定义顺序表ArrayList

    1.简介 顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素.使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通 ...

  5. LeetCode-1719 重构一棵树的方案数

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/number-of-ways-to-reconstruct-a-tree 题目描述 给你一个数组  ...

  6. Jmix- 业务系统高效开发的少代码平台

    企业在数字化转型的过程中,都面临将现有的业务流程进行"软件化"的过程.然而,在我们的印象中,通常会觉得针对业务系统的软件开发不是特别高效.这背后有很多原因,从开发角度看,有一个主要 ...

  7. Code Review在TDSQL-C 的应用实践

    1.1 为什么重视Code Review? 结合下面这个例子,我们来谈谈为什么要重视code review.假设你作为新人刚入职,领导分配了一个需求,于是接下来做了下面这些事: 为了完成任务疯狂敲了三 ...

  8. MySQL8.0 存储引擎(InnoDB )buffer pool的实现原理

      数据库为了高效读取和存储物理数据,通常都会采用缓存的方式来弥补磁盘IO与CPU运算速度差.InnoDB 作为一个具有高可靠性和高性能的通用存储引擎也不例外,Buffer Pool就是其用来在内存中 ...

  9. 前端常见的Vue面试题目汇总

    请说一下响应式数据的原理 默认Vue在初始化数据时,会给data中的属性使用Object.defineProperty重新定义所有属性,当页面到对应属性时,会进行依赖收集(收集当前组件中的watche ...

  10. hostPath类型的卷挂载

    卷类型之hostPath hostPath类型的卷可以把宿主机节点上的文件或文件夹挂载到pod中 先来看看hostPath类型的卷如何配置: apiVersion: v1 kind: Pod meta ...