Tables是一个强大的工具,可以在各种情况下使用。主要目的是收集数据,供以后分析。Tables也被用作容器,将初始训练数据传递给ActiveLearningSimulation等。
在下一节中,您将通过一组简单的示例学习如何使用Table模块和TableIteration模块:
这两个模块可以在Workflow Catalogs下的Algorithm中找到,是先收集数据,然后处理数据的非常方便的方法。
在下载和链接栏中,您将找到在以下示例中创建的所有工作流的列表。
最简单的工作流程是向表格中添加结构。因此,在本例中,我们放置了一个Configuration模块,后面跟着一个Table模块。
Table模块的目的是在列和行中收集数据,因此我们需要指定表应该有多少列,以及列应该接收哪种数据类型。
双击编辑Table模块。在本例中,我们需要一个包含结构的单列。因此,第一列的数据类型应该是结构。单击Add按钮向指定的表中添加一列。
表格是由多种数据类型的列和记录不同数据的行构成。每列的不同数据类型将在下文中解释。
以下为几个可用的列选项
Type应仅在无法使用更具体的列选项时使用。因此,如果我们想收集 BulkConfigurations,我们可以使用Type列,但 Configuration列允许您指定更多信息,例如结构是否具有空间区域等。
在菜单中选择Configuration,以便指定一个包含BulkConfiguration的列。在本指南中,我们稍后还将使用Type和PhysicalQuantity列选项。
一旦添加了Configuration列,它应该在列表中可见,并且可以被选中。选中后,Configuration列的设置将在右侧的Column Specification中显示。
在小窗口中指定BulkConfiguration作为结构类型。
生成的工作流将把提供的原子结构放入表格中,从而得到一个只包含单列和单行的表格。
当然,这是一个非常简单的示例,单独使用时并不太有用。因此,接下来我们将介绍一个更有用的示例。
Table的一个标准用例是使用Iteration模块来收集结果,这些结果保存在iteration_block_with_table.hdf5文件中。在这个示例中,我们首先定义一个Iteration模块,在其中对 k 点采样参数进行循环。该示例的目标是确定 (9,9,9) 的 k 点采样是否收敛。
为了指定k点采样参数,我们打开Iteration模块的编辑器。单击Add按钮以向Iteration模块中添加一个迭代器。
在本例中,我们选择菜单中的List of integers。
填写迭代器的名称和数值。在这种情况下,我们希望对值 (1, 3, 5, 7, 9) 进行循环。
在这里Range of integers也可以被使用。在这个示例中,这意味着将Start(起始值)设置为1,Step size(步长)设置为2,Step(步数)设置为4,从而得到Stop(停止值)为9。细心的读者会注意到,范围的设定是冗余的。因此,只要改变Start、Step size 或 Steps将更新stop,而改变stop将更新start。
Iteration模块的工作原理类似于 Block of Blocks模块(参见Block of Blocks),在这种情况下它由5个模块组成:
首先,我们修改LCAOCalculator以使用迭代器。首先选择一个Monkhorst-Pack网格,然后在 A、B、C 采样字段中使用选择迭代器sampling。
其次,我们使用Custom(自定义)模块从TotalEnergy分析对象中提取总能量(请参阅什么是Workflow block以及如何编辑它)。Custom模块是非常强大且灵活的模块。它们支持插入自定义QuantumATK脚本,从而使自定义模块能够作为复杂计算设置的接口。
要从TotalEnergy分析对象中提取总能量,我们必须在Inputs选项卡中指定Custom模块要求一个以TotalEnergy分析对象作为输入。
在Outputs选项卡中,我们需要指定Custom模块返回一个以电子伏特(eV)为单位的量。
最后,在Script选项卡中,我们编写脚本从TotalEnergy对象中提取总能量。
计算运行后,会生成一个结果表格,可以在Table Viewer中查看。(Table Viewer可以通过数据工具Analyzers and Preferences打开)
表中很容易看出,总能量已经收敛到10 meV以内(或至少4位有效数字)。
假设你刚刚完成了前面的计算,但你还需要检查直接带隙是否收敛。你现在可以使用Load from file模块加载之前的表格,然后使用TableIteration计算table_iteration.hdf5表格中每一行的带隙。
当使用Load from file模块从文件加载表格时,它会识别文件并将Load from file模块的名称和图标调整为带有Table图标的Load Table。Load from file
Load from file模块用于加载表格。使用Load from file按钮来指定表格。
TableIteration模块将表格作为输入,并提供表格行的信息用来迭代。然而,工作流中可能存在多个表格,因此我们需要指定在提供的表格中需要包含的列。换句话说,我们需要保证TableIteration模块的列与表格的列一致。
方法与指定表格块类似。因此,我们需要指定一个原子结构列、一个用于采样的整数列以及一个总能量列。
与上一个例子类似,我们需要一个自定义模块,这次是为了提取Bandstructure对象的直接带隙。因此,我们需要指定自定义模块的Script选项卡。
我们还需要在自定义模块的Inputs选项卡中指定一个Bandstructure对象作为输入。
在自定义模块的Outputs选项卡中,我们指定提供一个以电子伏特(eV)为单位的物理量作为输出。
最后,我们将k点采样和带隙数据汇总到一个表格中。因此,我们需要指定几个列来收集数据。基于此,我们这里收集带隙和采样。
带隙,指定一个以电子伏特(eV)为单位的带隙PhysicalQuantity列:
定义采样规范时,用一个特定的列来表示采用类型,该类型指定为整数。
表格中的结果清楚地显示,直接带隙已收敛到1 meV以内(至少3位有效数字)。(Table Viewer可以通过数据工具Analyzers and Preferences打开)
我们现在已经使用了Table和TableIteration模块,并希望展示了它们的便利性和灵活性。你可以在表格中收集几乎任何内容,可以使用Load from file模块轻松加载表格,并且可以轻松地对表格的行进行迭代。