77范文网 - 专业文章范例文档资料分享平台

VASP几个计算实例(3)

来源:网络收集 时间:2019-02-15 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

在应变较小的情况下,应变后体系的总能 按应变张量 进可按泰勒级数展开为:

(110)

其中

应变前的基矢

是应变前体系的总能,

之间的关系为:

(111)

是应变前原胞的体积。另外,应变后基矢

其中 为单位矩阵。

因此选取特定的应变 ,计算出在一组不同幅度时应

变前后体系总能的变化( ),再根据总能的变化-应变幅度对应的一组数据点,进行二次函数拟合得到二次项系数。即可得到晶体的某个弹性常数或弹性常数的组合。对不同的晶系的晶体,因为对称性的关系,它独立的弹性常数是确定的。比如对六角晶系的晶体,它独立的弹性常数为:

,

,

,

六角晶体的弹性应变能与应变关系

对六角晶系的晶体,其原胞基矢可以取为:

(112)

其中 和 是晶体的晶格常数。

可以施加这样的应变 来计算

[#!WangSQ:Abiec:2003!#]:

(113)

施加应变

来得到

(114)

对于

,施加应变

来得到:

(115)

对于

,施加应变

来得到:

(116)

最后,施加应变

得到

的组合:

(117)

由此可见,通过施加五个特定的应变,选取一系列幅度 的应变,得到 数据点,再分别按上面五个关系式对相应的 进行拟合得到二次项系数,最后联立方程得到求出六角晶系晶体的独立弹性常数。

具体计算步骤

在计算时,有几点要特别注意的:a),原胞内原子在应变是否驰豫;b),k点网格大小是否足够,因为在应变后,原胞的对称性会发生变化,即使同样的k点网格,在简约布里渊区产生的k点数目是不同的。因此,k点网格大小要取得足够,以保证弹性常数计算的精确性;c),应变幅度 要取得适中,如果太小的话,得到的应变能(应变前后体系的变化)很小,在计算弹性常数时,会引起计算误差。

下面以计算六角AlN(纤锌矿结构)为例,在计算过程考虑了应变后原子的位置需要驰豫,具体步骤如下:

?

先对六角AlN体材料的晶格参数(晶格常数和原子位置)优化好,这样得到未应变时的POSCAR,并把它拷贝成下面defvector.f需要用到的一个的输入文件OLDPOS,并对OLDPOS做一个处理。因为OLDPOS在格式上有特殊要求:

a

、在OLDPOS的第一行,在title的字符串之后,至少空一格再加上OLDPOS中原子的种类数目,比如AlN中有两类原子,title写为AlN,那么就OLDPOS的第一行就是\。 b

、OLDPOS的格式与POSCAR的类似,但是它最好是分数坐标来写出原子的位置。 以六角AlN为例,这个OLDPOS的内容如下:

towidth 0.8pt height 0cm depth 0.25cmwidth 1.025height 0cm depth 0.8ptwidth 0.8pt height 0cm depth 0.25cm 1.0 AlN 2 3.11553

1.000000 0.000000 0.000000 -0.500000 0.866025 0.000000 0.000000 0.000000 1.605000 2 2 Direct

0.00000000 0.00000000 0.00000000 0.333333333 0.666666667 0.50000000 0.00000000 0.00000000 0.381483673 0.333333333 0.666666667 0.881483673

towidth 0.8pt height 0.25cm depth 0cmwidth 1.025height 0.8pt depth 0cmwidth 0.8pt height 0.25cm depth 0cm

?

对特定的应变,在下面的defvector.f中\部分,把特定的应变通过给strain(i)矩阵赋值。比如对上面提到的

用来计算

那么就对defvect.f中的\改写成如下的形式:

towidth 0.8pt height 0cm depth 0.25cmwidth 1.025height 0cm depth 0.8ptwidth 0.8pt height 0cm depth 0.25cm 1.0 C%%%%%%%%% Define the strain %%%%%%%%%%%%%% strain(1)=delta strain(2)=delta strain(3)=0.0

strain(4)=0.0 strain(5)=0.0 strain(6)=0.0

towidth 0.8pt height 0.25cm depth 0cmwidth 1.025height 0.8pt depth 0cmwidth 0.8pt height 0.25cm depth 0cm

其中整个defvector.f是用来得到某个应变后,新的POSCAR。应变的类型按\the strain\的部分来定义,而 应变的幅度需在程序编译后,运行编译得到的模块时输入。defvect.f的内容如下:

towidth 0.8pt height 0cm depth 0.25cmwidth 1.025height 0cm depth 0.8ptwidth 0.8pt height 0cm depth 0.25cm 1.0

C%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

C >this simple program to get the primitive vectors after C $\\delta$ strain, in order to calculate the independent C

elastic constants of solids. C usage: C!!!!! Please first prepare the undeformed POSCAR in OLDPOS C >defvector.x C >type defvector.x > create new POSCAR in file fort.3

C%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

program defvector

real*8 privect,strvect,delta,strten,strain,pos, alat dimension

privect(3,3),strvect(3,3),strten(3,3),strain(6) dimension pos(50,3)

character*10 bravlat, title, direct integer i,j,k,ntype, natomi, nn dimension natomi(10)

C%%%%%%%%% Read the undeformed primitive vector and atomic postion %%%%%%%

open(7,file='OLDPOS')

C%% In first line of OLDPOS, please add the number C%% of the type of atoms after the title

read(7,*) title, ntype read(7,*) alat do i=1,3

read(7,*) (privect(i,j),j=1,3) write(*,*) (privect(i,j),j=1,3) enddo

read(7,*) (natomi(i),i=1,ntype)

nn=0

do i =1, ntype

nn=nn+natomi(i) enddo

read(7,*) direct do i=1, nn

read(7,*) (pos(i,j),j=1,3) enddo

C%%%%%%%%% Read the amti of strain %%%%%%%%%%%%%%% read(*,*) delta

C%%%%%%%%% Define the strain %%%%%%%%%%%%%% strain(1)=delta strain(2)=0.0 strain(3)=0.0 strain(4)=0.0 strain(5)=0.0 strain(6)=0.0

C%%%%%%%%% Define the strain tensor %%%%%%%%%%%%%%%%%%%%%%%% strten(1,1)=strain(1)+1.0 strten(1,2)=0.5*strain(6) strten(1,3)=0.5*strain(5) strten(2,1)=0.5*strain(6) strten(2,2)=strain(2)+1.0 strten(2,3)=0.5*strain(4) strten(3,1)=0.5*strain(5) strten(3,2)=0.5*strain(4) strten(3,3)=strain(3)+1.0

C%%%%%%%%% Transform the primitive vector to the new vector under strain%%%%%

C strvect(i,j)=privect(i,j)*(I+strten(i,j))

do k=1,3 do i=1,3

strvect(i,k)=0.0 do j=1,3

strvect(i,k)=strvect(i,k)+privect(i,j)*strten(j,k) enddo enddo

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库VASP几个计算实例(3)在线全文阅读。

VASP几个计算实例(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/465861.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: