这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
atk:quantumatk-se中的dftb模型 [2019/05/26 22:56] – [安装参数] xie.congwei | atk:quantumatk-se中的dftb模型 [2019/05/28 21:46] (当前版本) – [参考] xie.congwei | ||
---|---|---|---|
行 51: | 行 51: | ||
==== 能带结构计算 ==== | ==== 能带结构计算 ==== | ||
+ | |||
+ | ==== 能带结构计算 ==== | ||
+ | |||
+ | 为了测试参数是否正确安装,您可以对石墨烯执行以下的能带结构计算。 | ||
+ | |||
+ | * 启动 **QuantumATK** 并创建一个新项目,然后单击 **Open**。 | ||
+ | * 启动 {{: | ||
+ | |||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | * 将结构添加到 **Stash** (双击或使用 {{: | ||
+ | * 利用 {{: | ||
+ | * 在 **Script Generator**,添加以下模块: | ||
+ | - {{: | ||
+ | - {{: | ||
+ | * 修改输出文件名称为 '' | ||
+ | |||
+ | **Script Generator** 现在应该具有以下设置: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | 现在打开 {{: | ||
+ | |||
+ | * 选择 **ATK-SE: Slater-Koster** 计算器。 | ||
+ | * 更改 **k-point sampling** 为 (5, 5, 1)。 | ||
+ | * 转至 **Slater-Koster basis set**,检查已安装的基组是否在基组列表里。选择 “DFTB [mio]” 基组。 | ||
+ | |||
+ | <WRAP center important 100%> | ||
+ | === 注意 === | ||
+ | 如果您没有在列表中看到“DFTB [mio]”基组,则是安装过程中出现了问题。检查在您的 **ATK** 安装目录中是否存在文件 '' | ||
+ | </ | ||
+ | |||
+ | 为调用自洽的 DFTB 计算,取消勾选 **No SCF iteration** 的选项框。 | ||
+ | |||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | |||
+ | <WRAP center todo 100%> | ||
+ | === 关注 === | ||
+ | 默认的假设为紧束缚模型是非自洽的。对于自洽的模型,用户需要取消勾选 **No SCF iteration** 的选项框。大多数 DFTB 模型都是自洽的。 | ||
+ | </ | ||
+ | |||
+ | |||
+ | * 使用 **Send To** 按钮({{: | ||
+ | * 作业完成后,在 **QuantumATK** 主窗口的项目文件下找到文件 '' | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | <WRAP center important 100%> | ||
+ | === 注意 === | ||
+ | 如果测试进展顺利,则已正确安装了 DFTB 参数。然后,您可以在 QuantumWise 网站上提供的一些其他 ATK 教程(包括量子传输计算)中采用 DFTB 参数代替 DFT 以节省计算时间。 | ||
+ | |||
+ | 显然,这仅适用于 DFTB 基组所涵盖的元素。 | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
行 57: | 行 121: | ||
==== 计算石墨烯带的自旋极化 ==== | ==== 计算石墨烯带的自旋极化 ==== | ||
+ | |||
+ | 接下来,您将设置石墨烯纳米带,并使用 DFTB [mio] 模型执行自旋极化计算。 | ||
+ | |||
+ | * 打开 {{: | ||
+ | * 构建一个具有 8 个原子宽的锯齿形带。 | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 使用 builder 窗口右下角的 {{: | ||
+ | |||
+ | 在 **Script Generator**,添加以下模块: | ||
+ | |||
+ | * {{: | ||
+ | * {{: | ||
+ | * {{: | ||
+ | |||
+ | 更改输出文件名称为 '' | ||
+ | |||
+ | **Script Generator** 现在应该具有如下设置: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 打开 {{: | ||
+ | |||
+ | * 选择 **ATK-SE: Slater-Koster** 计算器。 | ||
+ | * 更改 **k-point sampling** 为 (1,1,11)。 | ||
+ | * 转至 **Slater-Koster basis set**,选择 “DFTB [mio]” 基组。 | ||
+ | * 为执行自旋极化 DFTB 计算,勾选 **Use polarized spin** 的选框。 | ||
+ | |||
+ | <WRAP center important 100%> | ||
+ | === 注意 === | ||
+ | DFTB 参数集不包括自旋极化参数。代替地,我们将从 ATK_W 数据库获得自旋极化参数。 | ||
+ | </ | ||
+ | |||
+ | 点击 **OK**,完成设置。 | ||
+ | |||
+ | 下一步, | ||
+ | * 双击打开 {{: | ||
+ | * 设置 **Initial state type** 为 //User spin//。 | ||
+ | * 在 Spin 下,设置 Carbon 和 Hydrogen 的默认旋转为 0。 | ||
+ | * **在 3D 视图:** | ||
+ | * 单击上方的碳原子(原子列表中的索引为 0),将它的 **initial relative spin** 设置为 1.0。 | ||
+ | * 对位于较低位置的碳原子(列表中的编号为 1)重复以上步骤,将其 **initial relative spins** 设置为 -1.0。(不要被碳原子并不是按 Y 坐标排序的事实所混淆)。 | ||
+ | * 保持氢原子和其他碳原子的 **initial relative spins** 值为 0.0。 | ||
+ | |||
+ | 对话框现在看起来应如下所示。 | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | 最后,打开 {{: | ||
+ | |||
+ | * 将 **Points pr. Segment** 设置为 200。这意味着每条能带将以 200 个点的分辨率计算。 | ||
+ | * 另外请注意默认建议的布里渊区(以倒易晶格矢量为单位,从 $\Gamma$ 点 G=(0,0,0) 到 Z=(0,0,1/2) )是很合适的。 | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | * 发送脚本到 {{: | ||
+ | * 返回至主 **QuantumATK** 窗口,选中文件 '' | ||
+ | * 利用放大功能,您应该可以得到如下所示的图: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | |||
==== 使用脚本计算一系列构型的性质 ==== | ==== 使用脚本计算一系列构型的性质 ==== | ||
+ | |||
+ | 如果您想要计算多个纳米带的能带结构,使用 Python 脚本将会非常方便。下面的脚本用于执行手性指数为(n,n)的纳米带能带结构计算,其中n是从 1 到 10。 | ||
+ | |||
+ | <WRAP center important 100%> | ||
+ | === 注意 === | ||
+ | **ATK** 中纳米带的// | ||
+ | |||
+ | 对于扶手椅形边缘纳米带,手性指数为(n,0)。 | ||
+ | </ | ||
+ | |||
+ | <code python> | ||
+ | # Setup the DFTB Calculator | ||
+ | basis_set = DFTBDirectory(" | ||
+ | pair_potentials = DFTBDirectory(" | ||
+ | |||
+ | numerical_accuracy_parameters = NumericalAccuracyParameters( | ||
+ | k_point_sampling=(1, | ||
+ | ) | ||
+ | |||
+ | iteration_control_parameters = IterationControlParameters() | ||
+ | |||
+ | calculator = SlaterKosterCalculator( | ||
+ | basis_set=basis_set, | ||
+ | pair_potentials=pair_potentials, | ||
+ | numerical_accuracy_parameters=numerical_accuracy_parameters, | ||
+ | iteration_control_parameters=iteration_control_parameters, | ||
+ | spin_polarization=True, | ||
+ | ) | ||
+ | |||
+ | #loop over different NanoRibbons | ||
+ | for n in range(1, | ||
+ | #generate the nanoribbon | ||
+ | bulk_configuration = NanoRibbon(n, | ||
+ | |||
+ | #Determine the initial spin of the configuration | ||
+ | elements = bulk_configuration.elements() | ||
+ | coords = bulk_configuration.fractionalCoordinates() | ||
+ | scaled_spins = numpy.zeros(len(elements)) | ||
+ | |||
+ | #find the index of the two edge Carbon atoms, | ||
+ | ymin = 0.5 | ||
+ | ymax = 0.5 | ||
+ | imin=0 | ||
+ | imax=0 | ||
+ | for i in range(len(elements)): | ||
+ | if coords[i][1] < ymin and elements[i] == Carbon: | ||
+ | ymin = coords[i][1] | ||
+ | imin = i | ||
+ | if coords[i][1] > ymax and elements[i] == Carbon: | ||
+ | ymax = coords[i][1] | ||
+ | imax = i | ||
+ | |||
+ | # set opposite spins on the edge Carbon atoms | ||
+ | scaled_spins[imin] = 1 | ||
+ | scaled_spins[imax] = -1 | ||
+ | |||
+ | #attach calculator, and set the initial spin | ||
+ | bulk_configuration.setCalculator( | ||
+ | calculator(), | ||
+ | initial_spin=InitialSpin(scaled_spins=scaled_spins), | ||
+ | ) | ||
+ | bulk_configuration.update() | ||
+ | |||
+ | # Calculate Bandstructure | ||
+ | bandstructure = Bandstructure( | ||
+ | configuration=bulk_configuration, | ||
+ | route=[' | ||
+ | points_per_segment=200, | ||
+ | bands_above_fermi_level=All | ||
+ | ) | ||
+ | nlsave(' | ||
+ | </ | ||
+ | |||
+ | |||
+ | 下载脚本到项目文件夹([[https:// | ||
+ | 生成文件 '' | ||
+ | 为分析数据,下载([[https:// | ||
+ | |||
+ | <code python> | ||
+ | w_list = [] | ||
+ | gap0_list = [] | ||
+ | gap1_list = [] | ||
+ | # read a list with the bandstructure data | ||
+ | bandstructure = nlread(' | ||
+ | |||
+ | for i in range(len(bandstructure)): | ||
+ | # get all the bandlines | ||
+ | energies = bandstructure[i].evaluate().inUnitsOf(eV) | ||
+ | #calculate the number of occupied bands | ||
+ | occupied_bands = numpy.sum(numpy.array(energies[0]) < 0) | ||
+ | #calculate the minimum direct band gap | ||
+ | gap0 = numpy.min(energies[:, | ||
+ | #calculate the band gap at the zone boundary | ||
+ | gap1 = energies[-1, | ||
+ | #determine the coordinates in the y direction | ||
+ | y_values = NanoRibbon(i+1, | ||
+ | # calculate the width, as distance between furthest carbon atoms | ||
+ | # i.e. calculate the H-H distance and subtracting the C-H distance | ||
+ | w = numpy.max(y_values)-numpy.min(y_values)-2.2 | ||
+ | #append calculated values to the list | ||
+ | w_list.append(w) | ||
+ | gap0_list.append(gap0) | ||
+ | gap1_list.append(gap1) | ||
+ | |||
+ | #print the data | ||
+ | import pylab | ||
+ | pylab.figure() | ||
+ | pylab.plot(w_list, | ||
+ | pylab.plot(w_list, | ||
+ | pylab.xlabel(r" | ||
+ | pylab.ylabel(" | ||
+ | pylab.show() | ||
+ | </ | ||
+ | |||
+ | |||
+ | {{ : | ||
+ | |||
+ | 图25 直接带隙(实心圆)和区域边界处的带隙作为纳米带宽度的函数。 | ||
+ | |||
+ | <WRAP center important 100%> | ||
+ | === 关注 === | ||
+ | 除了最小的能带外,该图显示了与参考文献< | ||
+ | |||
+ | <code python> | ||
+ | calculator = LCAOCalculator( | ||
+ | numerical_accuracy_parameters=numerical_accuracy_parameters, | ||
+ | exchange_correlation = LSDA.PZ | ||
+ | ) | ||
+ | </ | ||
+ | |||
+ | 请记住还要修改输出文件的名称,以便将新数据与旧数据区分开。然后执行脚本。 | ||
+ | </ | ||
+ | |||
+ | |||
===== 参考 ===== | ===== 参考 ===== | ||
+ | * [1] Elstner, | ||
+ | * [2] Kohler, T. Frauenheim, B. Hourahine, G. Seifert, and M. Sternberg, J. Phys. Chem. A 111, 5622 (2007) | ||
+ | * [3] Y.W. Son, M.L. Cohen, and S.G. Louie, Phys. Rev. Lett. 97, 216803 (2006) | ||
+ | * 英文原文:https:// | ||