目前很多第一原理的程序都能直接计算出晶体的stress tensor,下面简单的介绍如何采用strain tensor---stress tensor的关系来计算弹性常数:
一、基础知识:
1. stress tensor的定义及两种写法:
这里的X就是下面的\sigma
2、stress tensor, elastic constant, strain tensor的关系,按Love's notation来给出的:
3. strain tensor的另一种写法:
e1, e2, e3, e4, e5, e6会直接与应变幅度相联系的。
4、strain tensor与晶格基矢的关系:
a1,a2,a3是应变前的晶格基矢,a1', a2', a3'是应变之后的晶格基矢,I是单位矩阵。
有了这些基础知识,就可以很容易理解怎么通过strain tensor ---- stress tensor的关系来得到弹性常数。
二、计算的步骤:
1)给定一种strain,即确定strain tensor的取值
简单起见,将e1, e2, e3,e4, e5, e6中的某些取为0,某些不取为0。具体怎么取,就按使得应变幅度、弹性常数和stress tensor三者这之间的关系最为简单。应变幅度在e1,e2, e3,e4,e5,或e6中体现。
2)有了strain tensor,根据strain tensor与晶格基矢的关系,得到应变之后的基矢;(需自己写个矩阵相乘的小程序,得到应变之后的基矢)
3)得到了应变之后的基矢,原子的坐标取为应变之前原子的分数坐标作为初始的位置,优化原子的位置,计算stress tensor。(准备第一原理的输入文件,并进行计算)
4)得到了stress tensor(这个从第一原理程序的输出文件可以找出的),再根据stress tensor、弹性常数、应变幅度的关系得到弹性常数。
5)根据晶体的对称性的不同,其独立的弹性常数个数是不同的。因此对不同的对称性的晶体,可能要多做几组不同的应变。立方晶系(简单立方、面向立方和体心立方)只要一组应变就可以了。
注意之处:应变幅度要适中、不能太大也不能太小。可以对同一组应变,取不同的幅度大小,然后进行线性拟合,以保证数值计算的精确性。
补记:
Lattice parameters(A) Cell Angles
a = 4.803591 alpha = 90.000000
b = 4.803591 beta = 90.000000
c = 9.341006 gamma = 120.000000
I change the length of c axis,the relax all atoms with fixed lattice constant. Under this condition, "finite_basis_corr" is true.
The following is calculated stress under strain :0.097*c and 1.003*c.
Lattice parameters(A) Cell Angles
a = 4.803591 alpha = 90.000000
b = 4.803591 beta = 90.000000
c = 9.312983 gamma = 120.000000
*********** Symmetrised Stress Tensor ***********
* Cartesian components (GPa) *
* x y z *
* x -0.103625 0.000000 0.000000 *
* y 0.000000 -0.103625 0.000000 *
* z 0.000000 0.000000 -0.250210 *
Lattice parameters(A) Cell Angles
a = 4.803591 alpha = 90.000000
b = 4.803591 beta = 90.000000
c = 9.369029 gamma = 120.000000
*********** Symmetrised Stress Tensor ***********
* Cartesian components (GPa) *
* x y z *
* x 0.099333 0.000000 0.000000 *
* y 0.000000 0.099333 0.000000 *
* z 0.000000 0.000000 0.241425 *
If I calculate elastic constant directly, the "finite_basis_corr" is always false. Therefore, the output stress is
Lattice parameters(A) Cell Angles
a = 4.803591 alpha = 90.000000
b = 4.803591 beta = 90.000000
c = 9.312983 gamma = 120.000000
*********** Symmetrised Stress Tensor ***********
* Cartesian components (GPa) *
* x y z *
* x 0.308581 0.000000 0.000000 *
* y 0.000000 0.308581 0.000000 *
* z 0.000000 0.000000 0.156842 *
Lattice parameters(A) Cell Angles
a = 4.803591 alpha = 90.000000
b = 4.803591 beta = 90.000000
c = 9.369029 gamma = 120.000000
*********** Symmetrised Stress Tensor ***********
* Cartesian components (GPa) *
* x y z *
* x 0.508817 0.000000 0.000000 *
* y 0.000000 0.508817 0.000000 *
* z 0.000000 0.000000 0.644355 *
(2011-05-06)