Workflow Builder(工作流构建器)是QuantumATK NanoLab的核心功能之一。它能够轻松地将计算设置为由不同计算步骤组成的workflow。这些计算步骤可以形成一个或多个执行分支,然后可以通过Jobs工具运行这些分支。
使用Workflow Builder,您将能够创建迭代循环,遍历整数、浮点数、PhysicalQuantity(物理量)和原子结构等。您将能够对多个计算步骤进行分组并保存以供以后使用,也可以保存并与您的同事共享整个工作流。
在下一节中,您将通过一组简单的示例了解更多关于Workflow Builder及其用户界面的信息。您将学习如何使用一个或多个原子结构创建工作流,如何将工作流拆分为多个执行分支,如何通过Jobs工具运行工作流,以及如何重新使用先前计算的结果。
在下载和链接栏中,您将找到在以下示例中创建的所有工作流的列表。
熟悉Script Generator(脚本生成器)的用户会发现Workflow Builder与之非常相似。Workflow Builder取代了之前QuantumATK NanoLab版本中的Script Generator。Workflow Builder支持Script Generator的所有功能特性,并且还引入了一些新功能,例如支持多个执行分支或支持遍历所有的自定义PhysicalQuantity值或原子结构。
Workflow Builder是QuantumATK NanoLab的一个强大功能,您可以轻松地设置和运行计算。如图所示,它位于QuantumATK NanoLab主窗口左侧的侧边工具栏中。
在此工具中,您可以创建名为Workflows的新对象,这些对象可以在Workflow Builder中保存、共享、重新打开和编辑。有效的工作流可以直接转换为一个或多个脚本,这些脚本可以通过Jobs工具运行。
Workflow被自动保存为.hdf5文件,在Workflow Builder和Data工具中都可见。要共享工作流,只需共享它的.hdf5文件。
Workflow由一个或多个称为Blocks(模块)的组件组成。每个模块表示一个或多个计算步骤,并显示计算参数。计算参数可以在Workflow Builder中编辑。创建工作流就像从内置模块目录中组装模块一样简单。要了解更多关于模块的信息,请跳转到“什么是Workflow block以及如何编辑它“这一节查看。
一个Workflow可以包含一组计算。这是因为工作流模块可以包含一系列对象及其参数值。然后工作流可以遍历所有给定的不同输入执行相同的计算。为了提高计算吞吐量,您还可以将工作流拆分为更多的执行分支。
您可以将Workflow导出为单个Python脚本或多个Python脚本。每个脚本将代表工作流中的一个执行分支。拥有多个脚本使您能够并行运行工作流,而不是串行运行,这可以显著提高计算速度。
本指南假设您熟悉QuantumATK NanoLab中的Data工具和Builder工具。Data工具用于管理文件和分析结果。Builder工具用于创建、操作和查看原子结构。
首先打开QuantumATK NanoLab并创建一个new project(新项目)。打开程序后,您将看到的第一个窗口是Data工具窗口。
要选择Workflow Builder,请单击位于左侧边工具栏中的图标。一个新的Workflow Builder窗口将包含三个主要区域-Workflow Stash(工作流存储区),Workflow Area(工作流区域)和 Workflow Catalogs(工作流目录)。
Workflow Stash在左边用红色高亮显示。在这里,您将找到所有现有的项目工作流。在这里,您还可以创建新的工作流,或者删除、重命名或复制现有的工作流。当前,Workflow Stash为空。
Workflow Area位于Build选项卡的中心,以蓝色高亮显示。它显示了workflow Stash中当前选择的工作流的内容。
日志详细程度有三个级别——Full, Minimal 和 Silent。使用“Full程度”进行故障排除,使用“Minimal”仅检查最重要的步骤,而当您在不需要任何计算反馈时使用“Silent”。
包含预制工作流模块的Workflow Catalogs在右侧以绿色高亮显示。这些是构建工作流程的基本模块。在目录中,您会发现三个标签- QuantumATK,Templates和Blocks。目录中的模块可以在所有项目中使用。
QuantumATK选项卡包含了一系列内置模块,按不同类别划分,如Structures, Calculators 或 Analysis等。这个模块列表不能编辑。
如果您熟悉以前的QuantumATK NanoLab版本的Script Generator(脚本生成器),您将识别QuantumATK选项卡下的大多数模块。
每个QuantumATK模块可以是对象的容器,也可以是来自QuantumATK Engine的单个对象,例如BulkConfiguration, LCAOCalculator或Bandstructure。还有一些特殊模块,比如Iterator(迭代)模块或Custom(自定义)模块。要了解更多关于工作流模块的信息,请跳转到什么是Workflow block以及如何编辑它这一节。
Templates(模板)选项卡包含内置的单个模块和组合在一起的模块组来计算特定的性质,例如Molecular Dynamics(分子动力学)子类别中的Constant Density Melt Quench (DFT)。在Templates中您还可以找到具有特定参数值的单个模块,例如具有低k点密度的LCAOCalculator模块Metal (Low)模块。
如果您熟悉以前版本的 QuantumATK NanoLab中的Script Generator,您会发现Templates在Workflow Builder中也扮演了类似的角色。不同之处在于,Workflow Builder中的模板不能被修改,并且其列表中还包括单个模块。
Blocks选项卡是您可以在多个项目中保存自定义模块的地方。工作流模块可以被分组在一个称为Block of Blocks的容器模块中。由于Block of Blocks可以被保存,这使得即使是非常复杂的计算设置也可以重复使用。要了解如何在Blocks选项卡下保存模块,请跳转到“如何从Workflow中保存模块”一节。
Workflow block是工作流的基本构建单元。它可以被视为工作流中的一个计算步骤。一个模块通常代表来自QuantumATK Engine的单个对象。它可能需要QuantumATK Engine对象特定的输入,并且可以提供特定的输出。模块一个接一个地添加以形成工作流中的执行分支。如果一个模块有无效的输入,它会显示错误信息。
要编辑工作流中的模块,只需双击它。所有模块编辑器都会显示非默认值,并允许直接“重置”为默认值。编辑器包含底层QuantumATK Engine对象的默认设置,用户可以对其进行更改。
如果您对某些默认设置进行了更改,并希望恢复为默认值,请单击正在编辑的值附近的重置按钮,例如在Optimize Geometry block(结构优化模块)中以红色突出显示的Maximum step size(最大步长)参数(参见下图)。
当重置按钮被禁用(变灰)时,您将知道该值本身为默认值,就像用蓝色突出显示的Maximum number of steps(最大步数)参数一样。
除了表示单个QuantumATK Engine对象的模块之外,还有一些特殊的模块,例如 Configuration结构模块 (Split Parallel)和Split Parallel模块。这些模块实现了简单的并行化。它们可以包含一系列子模块,然后列表中每个子模块将属于一个单独的执行分支。生成的工作流脚本将遍历每个子模块,从而产生类似于循环展开的简单并行化机制。
最简单的例子是Configuration(Split Parallel)模块,它允许对多个原子结构进行相同的(并行)计算。具有Configuration(Split Parallel)或Split Parallel模块的工作流应该并行运行,如“具备多个分支的Workflow”一节所述。
其他特殊的模块包括Iteration, Block of Blocks, Custom模块以及Load from file模块。
使用Iteration模块,您可以指定整数、浮点数、不同类型的PhysicalQuantity变量和原子结构。然后,这些值可以用作工作流中一些其他模块的输入。使用Iteration模块,您可以遍历不同的原子结构,基矢,密度等。
Block of Blocks可以将工作流中的现有模块分组。使用此模块保存专门用于计算或分析一组属性的一系列模块,您可以稍后在其他工作流中重复使用这些模块。
Custom模块是非常强大和灵活的模块。它们支持插入自定义QuantumATK脚本。脚本、所需的输入和产生的输出可以直接在Workflow Builder中直接定义。自定义模块的输出也可以在后续模块中使用,从而允许自定义模块作为复杂计算设置的接口。自定义模块也可以保存到Blocks目录中,以便于再次使用。
Load from file模块支持包含已经计算完成的结果。所有QuantumATK对象都可以在工作流中直接加载和使用。一个明显的例子是基于已经更新的结构来进行额外的分析计算。
让我们创建一个简单的工作流,它使用LCAOCalculator计算BulkConfiguration的Bandstructure。要做到这一点,我们需要添加三个工作流模块,每个模块代表这些QuantumATK Engine对象中的一个。
我们将从在Builder数据库中的添加某个BulkConfiguration开始。
让我们从Builder加载一个BulkConfiguration到Workflow Builder。
首先通过单击左侧侧边工具栏中的图标打开Builder。这将打开一个新窗口。
一旦我们在Builder中单击Add图标并选择From Database。这将打开一个内置原子结构数据库,我们可以加载里面的结构到builder stash。
让我们加载一个名为Silver的原子结构。你将在Crystals标签下找到Silver。要快速找到它,请在中输入Silver。要将Silver添加到builder stash只需双击它。您将在builder stash中看到该原子结构,并在3D Viewer中看到它的图形。
要将Silver结构从Builder发送到Workflow Builder,请单击右下角的图标并选择Workflow Builder。
选择此选项将打开Workflow Builder窗口。在Workflow Builder中,你会注意到左侧的Workflow Stash中有一个名为Silver的新工作流对象。它是在发送Silver结构后自动创建的。该工作流包含一个代表Silver结构的BulkConfiguration模块。
让我们对该创建的工作流重新命名。在Workflow Stash中,单击编辑器将当前工作流的名称更改为bandstructure。
了解Workflow Stash中的工作流是特定于对象的,这一点很重要。您仍然可以从其他对象导入工作流,就像在QuantumATK NanoLab中导入任何其他.hdf5文件一样。跳转到如何共享一个Workflow一节可以了解有关导出和导入工作流的更多信息。
要查看工作流的文件位置,请在Workflow Stash中右键单击它并选择Open location
当前,我们的工作流具备一个称作Silver的BulkConfiguration模块。这是我们的原子结构模块。此时,我们可以从模块的编辑器中查看该结构。
现在让我们打开Bandstructure工作流中结构模块的编辑器。从那里,我们可以可视化和检查所添加的原子结构。要打开编辑器,双击Workflow Builder中央窗口(即Workflow Area)中的 Silver结构模块。
加载的原子结构将出现在左侧的原子结构列表中,并且3D窗口将显示其图形。在Definition列表中,您将看到其全部的属性,如类型、元素、标签、晶格类型和区域等。
向原子结构添加新的标签或区域,请使用右侧窗口中的Tags或Spatial Regions插件。
我们现在已经向工作流中添加了一个原子结构。下一步是创建一个计算器,并将其链接到已加载的原子结构上。
要添加计算器,请转到QuantumATK模块目录,展开Calculators的类别,并从计算器列表中选择一个Set LCAOCalculator模块。
添加Set LCAOCalculator模块需要一个原子结构作为输入。它将输出一个附加LCAOCalculator的相同原子结构。
计算器模块使用LCAOCalculator对象的内置参数。双击该模块以查看其默认值。在这里,您可以查看或编辑计算器属性。在本例中,我们将继续使用默认值。
我们的工作流当前包含一个原子结构和一个附加在其上的计算器。下一步我们将对给定的结构进行分析。
所有分析模块的完整列表可以在QuantumATK模块目录下的Analysis组中找到。
让我们在工作流中添加一个Bandstructure分析模块。
为了在分析模块的长列表中找到Bandstructure分析模块,我们建议使用文本搜索。然后从目录双击或拖放Bandstructure到Workflow Area。
Bandstructure模块需要一个附带计算器的BulkConfiguration作为输入。它输出一个Bandstructure分析对象。模块使用内置Bandstructure对象的默认参数。我们将不会编辑模块的参数,将继续使用默认值。
由于模块输入是有效的,并且它没有报告任何错误,让我们运行当前工作流。
工作流可以导出为Python脚本,该脚本可以使用Jobs工具运行。
要执行当前的bandstructure.hdf5工作流,单击右下角的按钮,并选择Jobs as script。这将启动一个Export to script窗口,您可以在其中指定Script 导出选项。让我们将结果文件名更改为bandstructure_results.hdf5。将其余选项保留为默认值并单击OK。
通过设置Workflow Area窗口底部以红色高亮显示的选项,您可以指定结果文件的默认名称和计算的日志详细程度。
设置完导出选项后,您需要按照以下步骤将脚本发送到Jobs工具。
首先单击Export to script窗口中的Ok按钮。这将打开一个保存对话框。选择保存脚本的位置并单击Save。接下来,您将看到Submission Settings窗口,您可以在其中选择运行选项,例如脚本将在哪个机器上运行。设置提交选项后,单击Submit按钮。
要了解有关通过Jobs工具运行脚本的更多信息,请遵循Jobs工具指南。
Jobs工具完成后,结果文件bandstructure_results.hdf5应该出现在Data工具中。结果文件应该包含两个已保存的对象——一个BulkConfiguration(附带LCAOCalculator)和一个Bandstructure对象。
让我们对上一节中的bandstructure.hdf5工作流进行更改。继续并双击Bandstructure模块以打开其编辑器。通过将Points per segment(每段点数)设置为25来增加采样,并将Brillouin zone route(布里渊区路径)设置为K,L。
更改之后,有两种方法可以重新运行工作流。
我们总是可以从头开始运行整个工作流程。这样,我们就不会使用上次运行中保存的任何结果。这是最简单的方法,但不是很经济。另一种方法是使用bandstructure_results.hdf5中先前计算保存的一些对象。至关重要的是,在新计算中重新使用的对象不受更改的影响。
前面的计算保存了两个对象—一个附加LCAOCalculator的BulkConfiguration和一个Bandstructure对象。在这个例子中,很容易看到第一个对象可以在新的工作流中再次使用,因为它不受Bandstructure模块更改的影响。为了在工作流中包含这个对象,我们将再次使用到Load from file模块。
第二种方法显然比较经济,而且速度更快,但是在新计算中挑选对象时需要格外小心。
这个模块非常简单,但功能强大。它使您能够在对相同工作流进行更改后重复使用已经计算过的部分。使用这个模块,您可以简单地从结果文件加载相应对象。
在上一节重新运行一个Workflow中,我们通过更改bandstructure模块中的一个属性修改了bandstructure.hdf5工作流。现在,我们想要使用带有附加计算器的相同结构对象重新运行工作流,它不受更改的影响。
首先通过单击左侧Workflow Stash工作流存储库中的Copy来创建一个bandstructure.hdf5工作流副本。这将复制当前的工作流,并将副本的名称更改为bandstructure_rerun。接着我们删除副本中现有的结构和计算器模块,我们将从前面计算的结果文件中提供这两个对象。
在QuantumATK模块目录下Algorithm(算法)模块中,找到模块,并将其作为工作流中的第一个模块。现在在工作流中应该只有两个块——Load from file模块和Bandstructure模块。
要更改工作流中模块的顺序,只需在Workflow Area窗口中拖拽它们。
您将注意到这两个模块都有错误。Load from file模块缺少用于加载QuantumATK Engine对象的文件,Bandstructure模块需要带有附加计算器的BulkConfiguration。
要解决错误,我们需要使用Load from file模块加载带有附加计算器的结构。要打开其编辑器,请双击Load from file模块。要加载对象,请单击编辑器底部的Load from file按钮。从前面的计算中选择结果文件bandstructure_results.hdf5,并加载附带计算器的结构。
在加载Load from file模块中的结构后,所有错误都应该消失,您将在编辑器窗口中看到一些详细信息,如结构类型、文件位置和对象id。
将新工作流的结果文件名更改为bandstructure_rerun_results.hdf5。文件名选项位于Workflow Area窗口的底部。
通过单击按钮来运行工作流,将其发送到Jobs工具。选择Jobs as script选项,按照与前一节相同的方式执行脚本导出步骤和Jobs工具步骤。
在Jobs工具完成后,您应该得到类似bandstructure_rerun_results.hdf5的结果.
新的工作流特性使得运行几个只有很小差异的计算变得更加容易,例如,计算相同原子结构但使用不同的计算器设置的Bandstructure。要做到这一点,我们可以复制相同的工作流,然后在每个副本中调整计算器设置。但这不是一个很好的方法,因为跟踪所有的工作流会变得非常麻烦。
我们应该做的是将工作流分割成多个执行分支。要做到这一点,我们需要使用QuantumATK模块目录中Algorithm Blocks部分的 Split Parallel模块。
让我们首先用一个BulkConfiguration模块和一个 Bandstructure模块创建一个新的工作流。
按照将原子结构从Builder发送到Workflow Builder一节中的描述,从Builder向Workflow Builder发送Silver结构。这将创建一个带有一个结构模块的新工作流。
现在按照怎样去添加一个分析对象中的描述添加Bandstructure模块。首先,将创建的工作流重命名为multiple_calculators,因为我们将在同一个工作流中使用多个计算器。我们希望有两个独立的执行分支。每个执行分支都应该计算相同Silver结构的Bandstructure,但使用不同的LCAOCalculator-S。
要分割工作流的执行,请从QuantumATK目录下的Algorithm Blocks组中删除 split Parallel并联模块。在工作流中,新模块需要放在BulkConfiguration和Bandstructure模块之间。
在Workflow Area中双击添加 Split Parallel并行模块,并打开其编辑器(见下图)。
您将在右侧红色高亮区域看到一个drop zone-一个空白区域,用于放置来自模块目录中所剔除的模块。而左侧蓝色高亮区域则显示的是一系列模块,该区域当前为空。列表中的每个模块将属于一个单独的执行分支。换句话说,列表中的每个模块将创建一个执行分支。如果我们在列表中添加一个模块,则只有一个执行分支。如果我们添加10个模块,我们将创建10个分支,以此类推……
我们希望有两个独立的执行分支,每个分支包含不同的LCAOCalculator-S。为此,我们将在Split Parallel模块中添加两个计算器。
要添加第一个LCAOCalculator计算器,请在QuantumATK目录下的 Auxiliary组中找到一个 LCAOCalculator模块,并将其拖拽到放置区。要添加第二个计算器,只需单击按钮。这将创建第一个计算器块的副本(见下图)。
在左边以红色高亮显示的模块列表中,我们现在有两个LCAOCalculator模块,一个名为LCAOCalculator,另一个名为LCAOCalculator_1。
在右侧以蓝色高亮显示的同一窗口中,您可以在列表中看到所选计算器模块的编辑器。我们可以使用右侧显示的编辑器来更改计算器的设置。
让我们改变第二个计算器的一些设置。选择左侧列表中的第二个计算器,并将其自旋从Unpolarized(非极化)更改为Polarized(极化),并将Basis Set(基组)从Medium(中等)更改为High(高)。这两个选项都在Main编辑器选项卡下。
在工作流中,你会注意到Bandstructure模块报告的一些错误,说明缺少带有附加计算器的BulkConfiguration。即使我们同时拥有BulkConfiguration和LCAOCalculator-S,我们也没有将它们链接起来。要解决此问题,请在 Split parallel 并行模块之后添加 Set Calculator模块。
Set Calculator模块需要两个输入——原子结构和计算器。它的唯一目的是将计算器附加到结构中。
注意,这里有LCAOCalculator和Set LCAOCalculator模块。第一个只是创建一个LCAOCalculator,另一个创建计算器并将其附加到一个结构上。
在工作流中,你现在应该有四个模块- BulkConfiguration模块, Split Parallel模块, Set Calculator模块和 Bandstructure模块。
工作流现在应该准备好执行了。执行工作流有不同的方法,如如何运行一个Workflow所述。
运行工作流的推荐方法是并行运行,如下一节运行具有多个分支的Workflow所述。
在Jobs工具完成工作流执行之后,您将得到类似于multiple_calculators_results.hdf5的结果。
包含 Split parallel并行模块的工作流可以有多个执行分支——每个分支对应列表中的子模块。运行此类工作流的推荐方法是将它们导出为多个脚本,将它们发送到Jobs工具并同时运行它们。每个导出的脚本将包含一个执行分支。
在右下角,单击并选择Jobs as multiple scripts。遵循脚本导出程序,这类似于将工作流导出为单个脚本。有关更多脚本导出细节,请参阅Script 导出选项。
可以通过增加结构的数量来提高计算吞吐量。
为了展示一个例子,首先复制我们创建的第一个工作流:bandstructure.hdf5。将副本重命名为multiple_configurations。
或者,您可以使用默认的LCAOCalculator和Bandstructure模块创建一个新的工作流。请参阅如何创建一个新的Workflow一节,了解如何从头创建工作流。
我们将需要向工作流中添加多个结构。由于在工作流副本中的第一个模块被限制为只能保存一个结构,所以我们接下来删除该模块。要向工作流添加更多结构,我们需要使用Configurations(Split Parallel)模块。您可以在Structures组下的QuantumATK模块目录中找到此模块。通过双击该模块或将其从目录拖放到Workflow Area来添加该模块。该模块应该是工作流中的第一个。添加模块之后,您会注意到一个错误图标。双击该图标可以查看错误信息。该信息说a configuration is missing。这是因为该模块最初是空的,没有任何原子结构,所以不能使用。
我们将从Builder_Stash.hdf5文件加载两个原子结构,
Builder_Stash.hdf5文件由QuantumATK NanoLab自动创建。它是特定于项目的,并且包含来自Builder工具中的builder stash的原子结构。您可以在项目文件夹中找到该文件。它也存在于Data工具中。
在从Builder_Stash.hdf5文件加载原子结构之前,我们需要在Builder工具中创建它们,并将它们添加到builder stash中。为了实现这一点,我们将使用Builder工具中的Crystal数据库。将结构从Crystal数据库加载到builder stash的步骤类似于我们在将原子结构从Builder发送到Workflow Builder一节中所做的操作。在Builder中,除了Silver结构之外,还要加载AgCd结构。在从Crystal数据库加载这些结构之后,您应该会在builder stash中看到两个分别名为Silver和AgCd的结构。当您在builder stash中加载Silver和AgCd结构时,通过单击位于左侧侧工具栏中的图标返回到Workflow builder窗口。
现在我们准备从Builder_Stash.hdf5文件加载这两个原子结构。
要加载结构,请双击Workflow Area中的Configurations (Split Parallel)模块,打开该模块的编辑器。在编辑器中单击按钮。这将在当前项目目录中打开一个文件浏览器。文件浏览器的中央窗口包含当前目录中的文件列表。注意,文件列表还包括Builder_Stash.hdf5文件。右侧窗口显示在文件浏览器的中央窗口中选中的文件的内容。
选择Builder_Stash.hdf5文件,并从其目录中选择两个BulkConfiguration-S—Silver和AgCd。单击Load以加载所选的原子结构。
加载的原子结构将出现在左侧的原子结构列表中,3D窗口将显示当前选择的原子结构的图形表示。
在Definition列表中,您将看到列表中两个原子结构共同的结构属性。在每个结构种都能找到类型、标签、晶格和区域等共同属性,而元素和标签包括了所有独特元素和标签的联合。要向列表中的任何原子结构添加新标记或区域,请使用右侧窗口中的Tags或Spatial Regions插件。
在同一模块中添加额外的原子结构与以前类似。现在唯一的约束是后续的原子结构必须具有相同的类型,即BulkConfiguration。 如果您现在关闭模块编辑器并查看Workflow Area,您将注意到模块中的一些变化—模块的图标已从更改为BulkConfiguration,以及两个子模块,一个称为Silver,另一个称为AgCd,对应于刚刚加载的BulkConfiguration-S。
现在,我们可以对来自 Configurations (Split Parallel)模块的每个BulkConfiguration-S运行Bandstructure计算。添加两个结构创建了两个执行分支,我们可以并行运行以提高效率。
将结果文件更改为multiple_configurations_results。按照运行具有多个分支的Workflow一节中的描述并行运行该工作流。
在Jobs工具完成工作流的执行之后,您应该得到与multiple_configurations_results.hdf5文件中相同的结果。
让我们在Bandstructure.hdf5工作流中添加更多分析模块。除了Bandstructure,我们还要计算BornEffectiveCharge和BlochState。首先复制Bandstructure.hdf5,并将副本重命名为block_of_blocks——这个名称稍后会更有意义。
现在将两个新的分析模块添加到工作流中。您可以在QuantumATK模块目录下的Analysis组中找到这两个模块。我们现在可以把工作流看作一个三步计算——原子结构加载、添加LCAO计算器和分析。
我们可以将最后三个分析模块分组在一个简单的模块下。为此,我们将使用Block of Blocks。您可以在Algorithm Blocks类别下找到它。
在工作流的末尾添加Block of Blocks,然后在它下面拖放分析模块。分析模块应该以三个子模块的形式出现在Block of Blocks下面。右键单击Block of Blocks,然后从下拉菜单中选择,将Block of Blocks重命名为 Analysis Blocks。
Block of Blocks模块用于将多个模块分组为一个,以便于管理。使用此模块可以保存一系列专门用于计算或分析一组属性的模块,您以后可以在其他工作流中重复使用这些模块。要了解如何保存自定义模块以供以后重用,请参阅如何从Workflow中保存模块部分。
现在,我们可以运行具有多个分析对象的计算。将结果文件更改为block_of_blocks_results。工作流只包含一个执行分支,因此我们只能串行运行它。
让我们将工作流发送到Jobs工具。单击右下角的,然后选择Jobs as script。按照脚本导出过程操作。有关更多脚本导出详细信息,请参阅Script 导出选项。
在Jobs工具完成工作流的执行后,您应获得与block_of_blocks_results.hdf5文件中相同的结果。
在下一节中,您将了解在Workflow Builder中使用的常见操作,例如如何从头创建工作流,如何保存当前工作流和自定义工作流模块,以及如何共享保存的模块和工作流。
您还将了解工作流导出选项,以及通过Jobs工具运行工作流的方法。
要创建一个新的工作流,请单击Workflow Stash窗口中的。一个新的工作流应该以通用名称出现在Workflow Stash中。由于新工作流为空,因此Workflow Area尚未显示任何内容。单击将工作流的名称更改为bandstructure。
Workflow Stash中的工作流是特定于项目的。您可以从其他项目导入工作流,就像导入任何其他.hdf5文件一样。
要查看工作流的文件位置,请在Workflow Stash中右键单击它并选择Open location。
所有工作流都会自动保存,并且每次更改都是永久性的。没有保存按钮。您可以在Workflow Builder或Data工具中的Workflow Stash中找到工作流。
了解Workflow Stash中的工作流是特定于项目的,这一点很重要。您仍然可以从其他项目导入工作流,就像导入任何其他hdf5文件一样。
工作流被保存为.hdf5文件,这意味着它们可以像所有其他QuantumATK对象或文件一样导出和导入。
您可以在Data工具和Workflow Builder的Workflow Stash中的文件中找到您的工作流。工作流文件可以很容易地在Data工具中通过图标找到。要找到工作流文件的位置,只需从Data或Workflow Builder中的Workflow Stash中右键单击它,然后选择Open location。
一旦您知道了工作流文件的位置,您就可以通过从顶部菜单中选择File→Import File将其导入到当前项目中。
当您导入工作流文件时,它将自动在Data工具和Workflow Builder中可用,因为QuantumATK NanoLab负责查找当前项目文件夹中存在的工作流文件。
假设您有一个具有一组特定设置的计算器模块,或者有一组模块执行一些您希望再次使用的特定分析,例如block_of_blocks.hdf5工作流中的 Analysis Blocks块。
要保存一个模块,只需将其从Workflow Area拖放到模块目录中的Blocks窗口中。
让我们在block_of_blocks.hdf5工作流中保存一个模块。将Analysis模块拖放到目录窗口的Blocks选项卡下。您可以重命名已保存的模块,或将其添加到新类别下。这样,模块将被永久保存,并且可以在新的工作流中重复使用。
重要的是要注意,保存的模块在所有项目之间共享。
工作流可以发送到Editor或Jobs工具。要将工作流发送到这两个工具中的任何一个,请单击workflow Builder右下角的按钮。这将显示一个带有三个选项的发送到菜单:
第一个选项将在Editor中将工作流作为单个Python脚本打开。在这里,您可以检查、编辑或保存工作流脚本。
选项Jobs as script和Jobs as multiple scripts可以将工作流导出为单个或多个Python脚本。您可以控制导出选项,例如在不同的计算阶段保存计算对象或保持对象的唯一名称。请参阅Script 导出选项一节,了解有关导出选项的更多信息。
当工作流包含多个结构时,多脚本导出相对于单脚本导出的优势是显而易见的。将为包含一个不同结构的工作流的每个执行分支生成一个脚本。然后可以使用Jobs工具并行执行这些多个脚本。
要基于当前工作流生成脚本,请单击并从下拉菜单中选择Editor。将打开一个新的Export to script窗口,您可以在其中调整一些导出选项。在下面的栏目中,您可以了解脚本导出选项的信息:
在下一节中,我们将参考下图。它在怎样去运行一个Workflow一节中展示了bandstructure.hdf5工作流可用的脚本导出选项。
这将是计算结果文件的文件名。默认文件名与Workflow Builder的Workflow Area窗口底部的filename区域相同。
生成的脚本可以具有不同的详细程度。Report all选项将编写所有默认值的脚本,而Minimal选项应该仅编写用户直接或间接更改的值的脚本。
Minimal选项将生成一个更紧凑的脚本,其中只有最重要的参数可见,而Report all选项将提供一个长而详细的脚本,这对故障排除很有用。
如果勾选此项,脚本将具有唯一的对象名称。否则,它会在之前的计算不再需要它们时覆盖它们。一个典型的情况是当结构列表中有多个结构时。如果未勾选此项,则两个结构变量将具有相同的名称。
在计算过程中,您可能希望不仅在计算结束时保存工作流中的对象,而且还希望在特定计算阶段保存工作流中的对象。这在分析结果和在更改某些参数的情况下重新开始计算时会有所帮助。
例如,bandstructure.hdf5工作流中的结果文件将包含BulkConfiguration、LCAOCalculator和Bandstructure等对象。除了保存Bandstructure和附带LCAOCalculator的最终BulkConfiguration对象外,您还可以在添加计算器之前保存初始BulkConfiguration。这样,您可以使用相同的结构与不同的计算器进行另一个计算。
在某些计算阶段保存对象是有用的,而这正是保存选项让您能够做到的。您可以将对象保存到最终结果文件、自定义文件,或者选择不保存。
例如,参考图中的每一行对应bandstructure.hdf5工作流中的一个模块,每个模块对应某个阶段的一个QuantumATK Engine对象:
将QuantumATK Engine对象保存到文件时,可以通过指定唯一标识符对其进行索引。这有助于在以后读取文件时查找特定的对象。要设置对象标识符,请单击。这将打开一个Silver output settings窗口——在本节引用的上图中以红色高亮表示。在这个窗口中,您可以设置object id字段——对象标识符。