预存
Document
当前位置:文库百科文章详情
ASE原子模拟环境入门之晶体和能带结构
来源: 时间:2022-12-16 16:41:29 浏览:5536次

这章,我们计算晶体的性质



建立体结构


ASE提供了三种框架来建立体结构:

  • ase.build.bulk()可以建立单质的体结构和少量化合物的点阵类型和点阵常数,但自定义有限。

  • ase.spacegroup.crystal()根据典型的晶体学信息(如空间群、晶格参数和基)创建原子。

  • ase.lattice从晶格和基底显式地创建原子。

习题:使用ase.build.bulk()来得到一个银单质的原胞,然后将它可视化。

已知银单质为FCC结构,所以这个功能可能会得到一个FCC原胞。但是我们总会希望能够验证我们所得到的结果。你能认出它的FCC结构吗?你可以,例如,使用ASE  GUI来重复结构和识别A-B-C堆叠。ASE还应该能够验证它确实是一个FCC原胞,并告诉我们选择了什么晶格常数:


print(atoms.cell.get_bravais_lattice())

ASE中的周期结构用atoms.cellatoms.pbc来表示。晶胞是一个cell对象,它使用三个向量来表示晶体的晶格。pbc是一个由三个布尔值组成的数组,它表示系统的每个方向上是否具有周期性。




体结构计算


对于周期性DFT计算,我们通常使用一些k点来自对布里渊区取样。包括GPAW和Aims在内的许多计算软件都接受kpts关键字,它可以是一个元组,如(4,4,4)。在GPAW中,平面波模式非常适合于较小的周期系统。使用平面波模式,我们还应该设置一个平面波截断(单位为eV):


from gpaw import GPAW, PW

calc = GPAW(mode=PW(600), kpts=(8, 8, 8),setups={'Ag': '11'}, ...)

这里我们使用了setups关键字来制定我们想要的是11个电子的PAW数据集,而不是默认的17个电子的数据集,这使得计算更快。

(原则上,我们应该确保k点和平面波截断都收敛——也就是说,编写一个循环来测试不同的采样,以确定两者都足够好,可以准确地描述我们想要的量。)

习题:使用GPAW运行一个银的体结构的单点计算。使用calc.write('Ag.gpw')保存它的基态,按照GPAW自己的格式。




态密度


保存了基态之后,我们可以重新加载它给ASE以提取态密度:


import matplotlib.pyplot as plt

from ase.dft.dos import DOS

from gpaw import GPAW

calc = GPAW('groundstate.gpw')

dos = DOS(calc, npts=500, width=0)

energies = dos.get_energies()

weights = dos.get_dos()

plt.plot(energies, weights)

plt.show()

调用width=0的DOS类意味着ASE很好地使用线性四面体插值方法计算DOS,这种方法花费时间,但给出了更好的表示。们也可以给它一个非零宽度,比如默认值0.1  (eV)。在这种情况下,它将使用一个简单的高斯模糊宽度,但我们需要更多的k点来得到相同质量的图。 注意,能量轴的零点是费米能量。

习题:画出(银的)DOS。你可能记得银原子包含10个d电子和1个s电子。(DOS谱中)哪一部分来自s电子?哪一部分来自于d电子?

你大概知道,过渡金属的d轨道更加地局域在核的附近,而s电子更加地离域。

在体相结构中,s轨道有很多重叠,因此在很宽的能量范围内分裂成很宽的能带。d态的重叠要少得多,所以也分裂得少:它们形成一个窄带,并且具有很高的DOS,因为d电子的数量是s电子的10倍。

所以来回答这个问题:d能带占据了-6.2eV到-2.6eV之间的一个很高的、窄的能带的绝大部分。而所有超出这个区间的能带都是由更宽的s带能构成。

贵金属Cu、Ag和Au的特征,是d带被完全占据。即,整个d带在费米能级(能量=0)以下。如果我们计算任何其他的过渡金属,费米能级应该在d带之内的某个地方。

注意:我们可以计算s,p和d投影的DOS来更加确定地看到哪个能带具有什么特性。这时候我们需要查看GPAW的文档,或者其他计算软件的文档。我们不在这里做这些事情。




能带结构


我们计算一下银的能带结构

首先我们需要建立一个能带路径。图像搜索引擎可以给我们展示一些参考图表。我们可以从Exciting和GPAW计算出来的能带结构中看到布里渊区路径“W L Γ X W K”。ASE知道这些字母,可以帮助我们图形化倒易晶胞:


lat = atoms.cell.get_bravais_lattice()

print(lat.description())

lat.plot_bz(show=True)

一般来说,ase.lattice模块提供了BravaisLattice类,用于分别表示3D和2D中的14+5个布拉菲格点。这些类知道高对称k点和标准布里渊区路径(使用AFlow约定)。

习题:为(W L G X W K)构建一个能带路径。你可以使用path = atom.cell.bandpath(...)—可以查阅cell文档来看这里需要哪些参数。这给我们一个BandPath对象。

你可以print()这个能带路径对象来查看它的基本信息,或者使用它的write()方法来将能带路径保存到一个json文件中,比如path.json。然后使用下面的命令将它可视化:


$ ase reciprocal path.json

一旦我们确定我们有一个合理数量的k点的良好路径,我们就可以运行能带结构的计算。如何触发一个带结构的计算取决于我们使用的是哪个计算软件,所以我们通常会参考该计算软件的文档(ASE总有一天会提供快捷方式,使这与普通计算软件协调更容易):


calc = GPAW('groundstate.gpw')

atoms = calc.get_atoms()

path = atoms.cell.bandpath(<...>)

calc.set(kpts=path, symmetry='off', fixdensity=True)

我们在这里告诉GPAW使用我们的k点路径,而不是使用对称性约化的k点,并固定电子密度。

然后我们就可以触发一个新的计算,这是一个非自洽计算,然后提取并保存能带结构:


atoms.get_potential_energy()

bs = calc.band_structure()

bs.write('bs.json')

同样,ASE命令行工具提供了一个有用的命令来从文件中绘制带结构:


$ ase band-structure bs.json

习题:计算,保存,然后画出银的能带图,使用K点路径[WLΓXWK]

你可能需要放大一些视野,一次看到全部。图将费米能级显示为虚线(但是并没有像DOS图那样定义为零)。观察能带结构,我们可以看到大部分由d轨道构成的复杂的缠结,以及少量由s态构成的低于d能带的能级(在Γ点)和高于d能带的能级(穿过费米能级)。




状态方程


通过状态方程的计算,可以找到最优格参数,并计算体积模量。这意味着在一个范围内采样能量和晶格常数,以获得最小值以及曲率,这给了我们体积模量。

ASE的在线文档已经提供了如何使用经验EMT势的教程:https://wiki.fysik.dtu.dk/ase/tutorials/eos/eos.html

习题:运行EOS教程。




复杂晶体和晶胞优化


对于简单的FCC结构,我们只有一个参数a, EOS的拟合告诉我们需要知道的一切。

对于更复杂的结构,我们首先需要一个更高级的框架来构建原子,比如ase.spacegroup.crystal()函数。

以下内容会帮助我们如何构建金红石结构,使我们省去了查找原子基(basis)和其他晶体结构信息的麻烦。金红石是二氧化钛的一种常见矿物形式。

习题:构建和可视化金红石结构。

我们来优化结构。除了原子位置,我们必须优化晶格常数,它是以两个长度a和c为特征的四角晶格。

优化晶格常数需要能量对晶格常数的导数,也就是应力张量。atoms.get_stress()计算并返回应力作为一个6元向量(Voigt形式)。使用它需要附加的计算软件支持应力张量。GPAW的平面波模式做到了这一点。

ase.constraints.ExpCellFilter允许同时优化晶胞和位置。它通过将自由度暴露给优化器来实现这一点,就像它们是额外的位置一样——因此起到了一种过滤器的作用。我们用它来包裹atoms变量:


from ase.optimize import BFGS

from ase.constraints import ExpCellFilter

opt = BFGS(ExpCellFilter(atoms), ...)

opt.run(fmax=0.05)

习题:使用GPAW的平面波模式优化金红石的原胞。你可能要使用至少500eV的平面波截断。优化后的晶格常数a和c是多少?

习题:计算金红石的能带结构。它与搜索引擎搜到的金红石的能带结构符合吗?




习题答案


Ag基态:


from ase.build import bulk

from gpaw import GPAW, PW

atoms = bulk('Ag')

calc = GPAW(mode=PW(350), kpts=[8, 8, 8], txt='gpaw.bulk.Ag.txt',

           setups={'Ag': '11'})

atoms.calc = calc

atoms.get_potential_energy()

calc.write('bulk.Ag.gpw')

Ag DOS:


import matplotlib.pyplot as plt

from gpaw import GPAW

from ase.dft.dos import DOS

calc = GPAW('bulk.Ag.gpw')#energies, weights = calc.get_dos(npts=800, width=0)

dos = DOS(calc, npts=800, width=0)

energies = dos.get_energies()

weights = dos.get_dos()

ax = plt.gca()

ax.plot(energies, weights)

ax.set_xlabel('Energy [eV]')

ax.set_ylabel('DOS [1/eV]')

plt.savefig('dos.png')

plt.show()

Ag能带结构:


from gpaw import GPAW

calc = GPAW('bulk.Ag.gpw')

atoms = calc.get_atoms()

path = atoms.cell.bandpath('WLGXWK', density=10)

path.write('path.json')

calc.set(kpts=path, fixdensity=True, symmetry='off')

atoms.get_potential_energy()

bs = calc.band_structure()

bs.write('bs.json')

金红石晶胞优化:


from ase.constraints import ExpCellFilter

from ase.io import write

from ase.optimize import BFGS

from ase.spacegroup import crystal

from gpaw import GPAW, PW

a = 4.6

c = 2.95

# Rutile TiO2:

atoms = crystal(['Ti', 'O'], basis=[(0, 0, 0), (0.3, 0.3, 0.0)],

               spacegroup=136, cellpar=[a, a, c, 90, 90, 90])

write('rutile.traj', atoms)

calc = GPAW(mode=PW(800), kpts=[2, 2, 3],

           txt='gpaw.rutile.txt')

atoms.calc = calc

opt = BFGS(ExpCellFilter(atoms), trajectory='opt.rutile.traj')

opt.run(fmax=0.05)

calc.write('groundstate.rutile.gpw')

print('Final lattice:')

print(atoms.cell.get_bravais_lattice())

金红石能带结构:

calc = GPAW('groundstate.rutile.gpw')

atoms = calc.get_atoms()

path = atoms.cell.bandpath(density=7)

path.write('path.rutile.json')

calc.set(kpts=path, fixdensity=True,

        symmetry='off')

atoms.get_potential_energy()

bs = calc.band_structure()

bs.write('bs.rutile.json')


计算狗·模拟计算

评论 / 文明上网理性发言
12条评论
全部评论 / 我的评论
最热 /  最新
全部 3小时前 四川
文字是人类用符号记录表达信息以传之久远的方式和工具。现代文字大多是记录语言的工具。人类往往先有口头的语言后产生书面文字,很多小语种,有语言但没有文字。文字的不同体现了国家和民族的书面表达的方式和思维不同。文字使人类进入有历史记录的文明社会。
点赞12
回复
全部
查看更多评论
相关文章

基础理论丨一文了解XPS(概念、定性定量分析、分析方法、谱线结构)

2020-05-03

晶体结构可视化软件 VESTA使用教程(下篇)

2021-01-22

手把手教你用ChemDraw 画化学结构式:基础篇

2021-06-19

【科研干货】电化学表征:循环伏安法详解(上)

2019-10-25

【科研干货】电化学表征:循环伏安法详解(下)

2019-10-25

Zeta电位的基本理论、测试方法和应用

2020-08-24

项目推荐/Project
第一性原理-COHP

第一性原理-COHP

第一性原理-反应能垒

第一性原理-反应能垒

热门文章/popular

基础理论丨一文了解XPS(概念、定性定量分析、分析方法、谱线结构)

晶体结构可视化软件 VESTA使用教程(下篇)

手把手教你用ChemDraw 画化学结构式:基础篇

【科研干货】电化学表征:循环伏安法详解(上)

电化学实验基础之电化学工作站篇 (二)三电极和两电极体系的搭建 和测试

【科研干货】电化学表征:循环伏安法详解(下)

微信扫码分享文章