<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
<sect1 id="usage_components">
	<title>Workflows</title>
	<para>This section describes the basics of workflows in RCE.</para>
	<sect2>
		<title>Rationale</title>
		<para>RCE is designed to execute automated, distributed workflows. Workflows consist of so called
			workflow components which can be coupled with each other. Loops are supported, even
			multi-nested ones.</para>
	</sect2>
	<sect2>
		<title>Getting Started</title>
		<para>To get started with workflows in RCE it is recommended to both read the following sections
			about workflows and walk through the example workflows provided in RCE. The sections
			here refer to the workflow examples where it is useful and vice versa.</para>
		<para>Workflows in RCE are encapsulated in so called projects. To create the workflow examples
			project go to: File → New → Workflow Examples Project. A dialog appears. Leave the
			default project name or give it a name of your choice and confirm by clicking
				<code>Finish</code>. In the <emphasis role="italic">Project Explorer</emphasis> on
			the left-hand side, the newly created project is shown. The example workflows are
			grouped in sub folders. It is recommended to walk through the workflows following the
			prefix starting with <code>01_01_Hello_World.wf</code>.</para>
	</sect2>
	<sect2 id="workflow_components">
		<title>Workflow Components</title>
		<para>Workflow components are either tools that are integrated by users or are provided by RCE
			supplying multi-purpose functionality. The following list shows workflow components
			provided by RCE grouped by purpose (workflow components that are deprecated (i.e., they
			are removed soon) or that are not recommended to use anymore are left out):</para>
			<itemizedlist>
				<listitem>
					<para>
					<emphasis role="italic">Data:</emphasis> Database</para>
				</listitem>
				<listitem>
					<para>
					<emphasis role="italic">Data Flow:</emphasis> Input Provider, Output Writer, Joiner, Switch</para>
				</listitem>
				<listitem>
					<para>
					<emphasis role="italic">Evaluation:</emphasis> Optimizer, Design of Experiments, Parametric Study, Converger, Evaluation Memory</para>
				</listitem>
				<listitem>
					<para>
					<emphasis role="italic">Execution:</emphasis> Script, Cluster, Excel</para>
				</listitem>
				<listitem>
					<para>
					<emphasis role="italic">XML:</emphasis> XML Loader, XML Merger, XML Values</para>
				</listitem>
				<listitem>
					<para>
					<emphasis role="italic">CPACS:</emphasis> TiGL Viewer, VAMPzero Initializer</para>
				</listitem>
			</itemizedlist>
		<para><note>
				<para>The Optimizer component uses the <ulink url="https://dakota.sandia.gov/"
						>Dakota toolkit</ulink> in order to perform the actual optimization. This
					toolkit is included in the RCE distribution, i.e., it is installed together with
					RCE. On some systems, however, notably Ubuntu 18.04, this toolkit cannot be
					executed, as the required library <emphasis role="italic"
						>libgfortran3</emphasis> is not installed by default. If the toolkit cannot
					be executed, the Optimizer component will issue the error <code>Could not start
						optimizer. Maybe binaries are missing or not compatible with system.; cause:
						Optimizer exited with a non zero exit code. Optimizer exit code = 127
						(E#1543567120128)</code> or similar in the workflow console and the data
					management.</para>
				<para><phrase os="linux">On Ubuntu 18.04, this library can be installed by
						installing the package <emphasis role="italic">libgfortran3</emphasis>. For
						other systems, please refer to the documentation or the administrator of
						your system in order to satisfy the missing dependency of the Dakota
						toolkit.</phrase>
					<phrase os="windows">Please refer to the documentation or the administrator of
						your system in order to satisfy the missing dependency of the Dakota
						toolkit.</phrase></para>
			</note>The example workflows in subfolder <code>02_Component Groups</code> introduce
			some of the workflow components provided. Additionally, there is a documentation for
			each workflow component available in RCE. To access it, you can either rightclick on a
			component in a workflow and select <code>Open Help</code> or press <code>F1</code>. A
			help view opens on the right-hand side. Moreover there is an entry <code>Help
				Contents</code> in the <code>Help</code> menu where you can navigate to the
			component help you require.</para>
		<para>The XML and CPACS components are able to read or extract data from an XML file via dynamic
			in- or outputs. The XPathChooser is a feature that provides help selecting the item,
			which shall be read or extracted. Add an in- or output and press the <code>XPath
				choosing...</code> button to open a window where you can select the XML file which
			contains the item that shall be selected. After choosing the file, the XPathChooser
			opens containing a tree, symbolizing the XML file. By selecting an element, the text
			below is updated and displays the current path. The last two columns are used to choose
			attributes. The attribute name can be selected via the column <code>Attributes</code>.
			In the column <code>Values</code> the proper value can be selected. Use a double-click
			on an element to expand or fold the tree. The chosen XPath will be written in the text
			field of the window in which the XPathChooser has been opened originally. Using this
			text field, new paths can be created. Add a slash and the name of the node that shall be
			created to the existing path. The new path will be added during the workflow run. </para>
		<para>New XPaths can only be generated within the inputs tab. Using the outputs tab will cause an error.</para>
	</sect2>
	<sect2>
		<title>Coupling Workflow Components</title>
		<para>A workflow component can send data to other workflow components. Therefore, a so called
			connection needs to be created between the sending workflow component and the receiving
			one. For that purpose, workflow components can have so called inputs and outputs. A
			connection is always created between an output and an input. You can think of a
			connection as a directed data channel. Data is sent as atomic packages which are not
			related to each other (there is no data streaming between workflow components).
			Supported data types are:</para>
		<para>Primitive data types:</para>
			<itemizedlist>
				<listitem>
					<para>
					<emphasis role="italic">Short Text:</emphasis>A short text (up to 140 characters)</para>
				</listitem>
				<listitem>
					<para>
					<emphasis role="italic">Integer:</emphasis>Integer number</para>
				</listitem>
				<listitem>
					<para>
					<emphasis role="italic">Float:</emphasis>Floating point number</para>
				</listitem>
				<listitem>
					<para>
					<emphasis role="italic">Boolean:</emphasis>Boolean value (true or false)</para>
				</listitem>
			</itemizedlist>
			<para>Referenced data types (The actual data is stored in RCE's data management and only a reference is transfered):</para>
			<itemizedlist>
				<listitem>
					<para>
					<emphasis role="italic">File:</emphasis>File</para>
				</listitem>
				<listitem>
					<para>
					<emphasis role="italic">Directory:</emphasis>Directory</para>
				</listitem>
			</itemizedlist>
			<para>Other data types</para>
			<itemizedlist>
			<listitem>
				<para>
					<emphasis role="italic">Small Table:</emphasis> The RCE syntax for Small Tables
					is [[a,b,...],[c,d,...],...], whereat the table values a,b,c,d are restricted to
					values of type Short Text, Integer, Float, Boolean (primitive data types) as
					well as File and Directory. Be aware, that in case of File and Directory simply
					the path to the Files or Directories will be stored in the Small Table. Each
					column holds the same number of entries. The total number of possible cells is
					up to 100.000. </para>
			</listitem>
				<listitem>
					<para>
					<emphasis role="italic">Vector:</emphasis>one-dimensional "Small Table" (one
					column) restricted to values of type Float i.e. [x,y,z,...]</para>
				</listitem>
				<listitem>
					<para>
					<emphasis role="italic">Matrix:</emphasis>Small Table restricted to values of type Float</para>
				</listitem>
			</itemizedlist>
			<para>Not all of the workflow components support all of the data types listed. A connection can be created between an output and an input if:</para>
			<itemizedlist>
				<listitem>
					<para>The data type of the output is the same as or convertible to the data type of the input.</para>
				</listitem>
				<listitem>
					<para>The input is not already connected to another output.</para>
				</listitem>
			</itemizedlist>
		<para>Note that data from an output can be sent to multiple inputs, but an input can just receive
			data from a single output. </para>
		<para>The following table shows which data types are convertible to which other
			types:</para>
		<para>
			<table frame="all">
				<title>Data Type Conversion Table</title>
				<tgroup cols="10">
					<colspec colname="c1" colnum="1" colwidth="1.05*" align="center" rowsep="1"/>
					<colspec colname="c2" colnum="2" colwidth="1.05*"/>
					<colspec colname="c3" colnum="3" colwidth="1*"/>
					<colspec colname="c4" colnum="4" colwidth="1*"/>
					<colspec colname="c5" colnum="5" colwidth="1*"/>
					<colspec colname="c6" colnum="6" colwidth="1*"/>
					<colspec colname="c7" colnum="7" colwidth="1*"/>
					<colspec colname="c8" colnum="8" colwidth="1*"/>
					<colspec colname="c9" colnum="9" colwidth="1*"/>
					<colspec colname="c10" colnum="10" colwidth="1*"/>
					<tbody>
						<row>
							<entry align="right" rowsep="0"><emphasis role="bold"
								>To</emphasis></entry>
							<entry align="center" valign="middle" morerows="1"><emphasis role="bold"
									>Boolean</emphasis></entry>
							<entry align="center" valign="middle" morerows="1"><emphasis role="bold"
									>Integer</emphasis></entry>
							<entry align="center" valign="middle" morerows="1"><emphasis role="bold"
									>Float</emphasis></entry>
							<entry align="center" valign="middle" morerows="1"><emphasis role="bold"
									>Vector</emphasis></entry>
							<entry align="center" valign="middle" morerows="1"><emphasis role="bold"
									>Matrix</emphasis></entry>
							<entry align="center" valign="middle" morerows="1"><emphasis role="bold"
									>Small Table</emphasis></entry>
							<entry align="center" valign="middle" morerows="1"><emphasis role="bold"
									>Short Text</emphasis></entry>
							<entry align="center" valign="middle" morerows="1"><emphasis role="bold"
									>File</emphasis></entry>
							<entry align="center" valign="middle" morerows="1"><emphasis role="bold"
									>Directory</emphasis></entry>
						</row>
						<row>
							<entry align="center">
								<emphasis role="bold">From</emphasis>
							</entry>
						</row>
						<row>
							<entry><emphasis role="bold">Boolean</emphasis></entry>
							<entry/>
							<entry align="center">x</entry>
							<entry align="center">x</entry>
							<entry align="center">x</entry>
							<entry align="center">x</entry>
							<entry align="center">x</entry>
							<entry/>
							<entry/>
							<entry/>
						</row>
						<row>
							<entry><emphasis role="bold">Integer</emphasis></entry>
							<entry/>
							<entry/>
							<entry align="center">x</entry>
							<entry align="center">x</entry>
							<entry align="center">x</entry>
							<entry align="center">x</entry>
							<entry/>
							<entry/>
							<entry/>
						</row>
						<row>
							<entry><emphasis role="bold">Float</emphasis></entry>
							<entry/>
							<entry/>
							<entry/>
							<entry align="center">x</entry>
							<entry align="center">x</entry>
							<entry align="center">x</entry>
							<entry/>
							<entry/>
							<entry/>
						</row>
						<row>
							<entry><emphasis role="bold">Vector</emphasis></entry>
							<entry/>
							<entry/>
							<entry/>
							<entry/>
							<entry align="center">x</entry>
							<entry align="center">x</entry>
							<entry/>
							<entry/>
							<entry/>
						</row>
						<row>
							<entry><emphasis role="bold">Matrix</emphasis></entry>
							<entry/>
							<entry/>
							<entry/>
							<entry/>
							<entry/>
							<entry align="center">x</entry>
							<entry/>
							<entry/>
							<entry/>
						</row>
						<row>
							<entry><emphasis role="bold">Small Table</emphasis></entry>
							<entry/>
							<entry/>
							<entry/>
							<entry/>
							<entry/>
							<entry/>
							<entry/>
							<entry/>
							<entry/>
						</row>
						<row arch="">
							<entry><emphasis role="bold">Short Text</emphasis></entry>
							<entry/>
							<entry/>
							<entry/>
							<entry/>
							<entry/>
							<entry align="center">x</entry>
							<entry/>
							<entry/>
							<entry/>
						</row>
						<row>
							<entry><emphasis role="bold">File</emphasis></entry>
							<entry/>
							<entry/>
							<entry/>
							<entry/>
							<entry/>
							<entry/>
							<entry/>
							<entry/>
							<entry/>
						</row>
						<row>
							<entry><emphasis role="bold">Directory</emphasis></entry>
							<entry/>
							<entry/>
							<entry/>
							<entry/>
							<entry/>
							<entry/>
							<entry/>
							<entry/>
							<entry/>
						</row>
					</tbody>
				</tgroup>
			</table>
		</para>
	</sect2>
	<sect2>
		<title>Execution Scheduling of Workflow Components</title>
		<para>The execution of workflows is data-driven. As soon as all of the desired input data is
			available, a workflow component will be executed. Which input data is desired is defined
			by the component developer (for RCE's default workflow components), the tool integrator,
			and/or the workflow creator. The workflow component developer and tool integrator decide
			which options are allowed for a particular workflow component. The workflow creator can
			choose between those options at workflow design time. The following options exist: </para>
		<para>Input handling:</para>
			<itemizedlist>
				<listitem>
					<para>
					<emphasis role="italic">Constant:</emphasis> The value won't be consumed during
					execution and will be reused in the next iteration (if there is any loop in the
					workflow). The workflow will fail if there is more than one value received, except
					for nested loops: All inputs of type <emphasis role="italic">Constant</emphasis>
					are resetted within nested loops, after the nested loop has been
					finished.</para>
				</listitem>
				<listitem>
					<para>
					<emphasis role="italic">Single (Consumed):</emphasis> The input value will be
					consumed during execution and won't be reused in the next iteration (if there is
					any loop in the workflow). Queuing of input values is not allowed. If another
					value is received before the current one was consumed, the workflow will fail.
					This can guard against workflow design errors. E.g., an optimizer must not
					receive more than one value at one single input within one iteration.</para>
				</listitem>
				<listitem>
					<para>
					<emphasis role="italic">Queue (Consumed):</emphasis> The input value will be
					consumed during execution and won't be reused in the next iteration (if there is
					any loop in the workflow). Queuing of input values is allowed.</para>
				</listitem>
			</itemizedlist>
			<para>Execution constraint:</para>
			<itemizedlist>
				<listitem>
					<para>
					<emphasis role="italic">Required:</emphasis> The input value is required for
					execution. Thus, the input must be connected to an output.</para>
				</listitem>
				<listitem>
					<para>
					<emphasis role="italic">Required if connected:</emphasis> The input value is not
					required for execution (e.g., if a default value will be used as fall back
					within the component). Thus, the input doesn't need to be connected to an
					output. But if it is connected to an output, it will be handled as an input of
					type <emphasis role="italic">Required</emphasis>.</para>
				</listitem>
				<listitem>
					<para>
					<emphasis role="italic">Not required:</emphasis> The input value is not required
					for execution. Thus, the input doesn't need to be connected to an output. If it
					is connected to an output, the input value will be passed to the component if
					there is a value available at the time of execution. Values at inputs of type
						<emphasis role="italic">Not required</emphasis> cannot trigger component
					execution except if it is the only input defined for a component. Note: With
					this option, non-deterministic workflows can be easily created. Use this option
					carefully. If in doubt, leave it out.</para>
				</listitem>
			</itemizedlist>
			<para>Note: With RCE 6.0.0 the scheduling options changed. Below is the migration path: </para>
			<itemizedlist>
				<listitem>
					<para>
					<emphasis role="italic">Initial</emphasis> was migrated to <emphasis role="italic">Constant</emphasis> and <emphasis role="italic">Required</emphasis>.</para>
				</listitem>
				<listitem>
					<para>
					<emphasis role="italic">Required</emphasis> was migrated to <emphasis role="italic">Single (Consumed)</emphasis> and <emphasis role="italic">Required</emphasis>.</para>
				</listitem>
				<listitem>
					<para>
					<emphasis role="italic">Optional</emphasis> was migrated to <emphasis role="italic">Single (Consumed)</emphasis> and <emphasis role="italic">Required if connected</emphasis>.</para>
				</listitem>
			</itemizedlist>
			<para>If you encounter any problems with workflows created before RCE 6.0.0, it is likely, that
			it affects the migration to <emphasis role="italic">Single (Consumed)</emphasis> instead
			of to <emphasis role="italic">Queue (Consumed)</emphasis>. We decided to migrate
			conservatively to not hide any existing workflow design errors. So, if queuing of input
			values is allowed for an input, just change the input handling option to <emphasis role="italic">Queue (Consumed)</emphasis> after the workflow was updated. Another
			issue can affect the migration of <emphasis role="italic">Optional</emphasis>. If it
			affects an input of the script component, check the option, which let the script
			component execute on each new value at any of its inputs. Also check <emphasis role="italic">Not required</emphasis> as an alternative execution constraint
			option.</para>
	</sect2>
	<sect2>
		<title>(Nested) Loops</title>
		<para>Workflow components can be coupled to loops. A loop must always contain a so-called driver
			workflow component. Driver workflow components (group "Evaluation") are: Optimizer,
			Design of Experiments, Parametric Study, Converger (see the example workflow
			"02_02_Evaluation_Drivers"). The responsibilities of a driver workflow component in a
			loop are:</para>
			<itemizedlist>
				<listitem>
					<para>Send values to the loop and receive the result values.</para>
				</listitem>
				<listitem>
					<para>Finish the loop based on some certain criteria.</para>
				</listitem>
			</itemizedlist>
		<para>If a loop contains another loop, we speak of the latter as a nested loop. A nested loop can
			contain again another loop and so on. To create workflows with nested loops (see example
			workflows in "03_Workflow_Logic"), some certain concepts behind nested loops must be
			understood:</para>
					<itemizedlist>
				<listitem>
				<para>Loop level: If a loop contains another loop, that loop is considered as a
					nested loop with a lower loop level. From the perspective of the nested loop,
					the other loop is considered as a loop with an upper loop level.</para>
			</listitem>
			<listitem>
				<para>If a driver workflow component is part of a nested loop, you need to check the
					checkbox in the "Nested Loop" configuration tab</para>
			</listitem>
				<listitem>
				<para>Data exchange between loops of different loop levels is only allowed via a driver workflow
					component. Thereby, only particular inputs and outputs of driver workflow
					components are allowed to be connected to inputs and outputs of the next upper
					loop level and particular ones to inputs and outputs of the same loop level. For
					example, if a 'same loop level' output is connected to a loop with an upper loop
					level, the workflow won't succeed or might even get stuck. Below you find tables
					of inputs and outputs for each driver workflow component and whether they must
					be connected to the same loop level or to the next upper loop level. <note>In
						the inputs and outputs tables of driver workflow components (in
						'Inputs/Outputs' properties tab), the loop level requirement is present in a
						particular column for each input and output.</note></para>
			</listitem>
			</itemizedlist>
			<table frame="all">
				<title>Inputs of Optimizer</title>
				<tgroup cols="2">
					<colspec colname="Input" colnum="1" colwidth="2.98*"/>
					<colspec colname="Type" colnum="2" colwidth="1*" align="center"/>
					<thead>
						<row>
							<entry>Input</entry>
							<entry align="left">Loop Level</entry>
						</row>
					</thead>
					<tbody>
					<row>
						<entry>* - lower bounds - start value</entry>
						<entry>To next upper loop level</entry>
					</row>
					<row>
						<entry>* - upper bounds - start value</entry>
						<entry>To next upper loop level</entry>
					</row>
					<row>
						<entry>* - start value</entry>
						<entry>To next upper loop level</entry>
					</row>
						<row>
							<entry>* (Objective functions)</entry>
							<entry>To same loop level</entry>
						</row>
					<row>
						<entry>* (Constraints)</entry>
						<entry>To same loop level</entry>
					</row>
					<row>
						<entry>d*.d* (Gradients)</entry>
						<entry>To same loop level</entry>
					</row>
					</tbody>
				</tgroup>
			</table>
			<table frame="all">
				<title>Outputs of Optimizer</title>
				<tgroup cols="2">
					<colspec colname="Output" colnum="1" colwidth="2.98*"/>
					<colspec colname="Type" colnum="2" colwidth="1*" align="center"/>
					<thead>
						<row>
							<entry>Output</entry>
							<entry align="left">Loop Level</entry>
						</row>
					</thead>
					<tbody>
					<row>
						<entry>*_optimal</entry>
						<entry>To next upper loop level</entry>
					</row>
					<row>
						<entry>Done</entry>
						<entry>To next upper loop level</entry>
					</row>
						<row>
							<entry>* (Design variables)</entry>
							<entry>To same loop level</entry>
						</row>
					<row>
						<entry>Gradient request</entry>
						<entry>To same loop level</entry>
					</row>
					<row>
						<entry>Iteration</entry>
						<entry>To same loop level</entry>
					</row>
					</tbody>
				</tgroup>
			</table>
			<table frame="all">
				<title>Inputs of Design of Experiments</title>
				<tgroup cols="2">
					<colspec colname="Input" colnum="1" colwidth="2.98*"/>
					<colspec colname="Type" colnum="2" colwidth="1*" align="center"/>
					<thead>
						<row>
							<entry>Input</entry>
							<entry align="left">Loop Level</entry>
						</row>
					</thead>
					<tbody>
						<row>
							<entry>*_start</entry>
							<entry>To next upper loop level</entry>
						</row>
						<row>
							<entry>*</entry>
							<entry>To same loop level</entry>
						</row>
					</tbody>
				</tgroup>
			</table>
			<table frame="all">
				<title>Outputs of Design of Experiments</title>
				<tgroup cols="2">
					<colspec colname="Output" colnum="1" colwidth="2.98*"/>
					<colspec colname="Type" colnum="2" colwidth="1*" align="center"/>
					<thead>
						<row>
							<entry>Output</entry>
							<entry align="left">Loop Level</entry>
						</row>
					</thead>
					<tbody>
						<row>
							<entry>Done</entry>
							<entry>To same loop level</entry>
						</row>
						<row>
							<entry>*</entry>
							<entry>To same loop level</entry>
						</row>
					</tbody>
				</tgroup>
			</table>
			<table frame="all">
				<title>Inputs of Parametric Study</title>
				<tgroup cols="2">
					<colspec colname="Input" colnum="1" colwidth="2.98*"/>
					<colspec colname="Type" colnum="2" colwidth="1*" align="center"/>
					<thead>
						<row>
							<entry>Input</entry>
							<entry align="left">Loop Level</entry>
						</row>
					</thead>
					<tbody>
						<row>
							<entry>*_start</entry>
							<entry>To next upper loop level</entry>
						</row>
						<row>
							<entry>*</entry>
							<entry>To same loop level</entry>
						</row>
					</tbody>
				</tgroup>
			</table>
			<table frame="all">
				<title>Outputs of Parametric Study</title>
				<tgroup cols="2">
					<colspec colname="Output" colnum="1" colwidth="2.98*"/>
					<colspec colname="Type" colnum="2" colwidth="1*" align="center"/>
					<thead>
						<row>
							<entry>Output</entry>
							<entry align="left">Loop Level</entry>
						</row>
					</thead>
					<tbody>
						<row>
							<entry>Done</entry>
							<entry>To same loop level</entry>
						</row>
						<row>
							<entry>*</entry>
							<entry>To same loop level</entry>
						</row>
					</tbody>
				</tgroup>
			</table>
			<table frame="all">
				<title>Inputs of Converger</title>
				<tgroup cols="2">
					<colspec colname="Input" colnum="1" colwidth="2.98*"/>
					<colspec colname="Type" colnum="2" colwidth="1*" align="center"/>
					<thead>
						<row>
							<entry>Input</entry>
							<entry align="left">Loop Level</entry>
						</row>
					</thead>
					<tbody>
						<row>
							<entry>*_start</entry>
							<entry>To next upper loop level</entry>
						</row>
						<row>
							<entry>*</entry>
							<entry>To same loop level</entry>
						</row>
					</tbody>
				</tgroup>
			</table>
			<table frame="all">
				<title>Outputs of Converger</title>
				<tgroup cols="2">
					<colspec colname="Output" colnum="1" colwidth="2.98*"/>
					<colspec colname="Type" colnum="2" colwidth="1*" align="center"/>
					<thead>
						<row>
							<entry>Output</entry>
							<entry align="left">Loop Level</entry>
						</row>
					</thead>
					<tbody>
						<row>
							<entry>Converged</entry>
							<entry>To next upper loop level</entry>
						</row>
						<row>
							<entry>Converged absolute</entry>
							<entry>To next upper loop level</entry>
						</row>
						<row>
							<entry>Converged relative</entry>
							<entry>To next upper loop level</entry>
						</row>
						<row>
							<entry>*_converged</entry>
							<entry>To next upper loop level</entry>
						</row>
						<row>
							<entry>Done</entry>
							<entry>To same loop level</entry>
						</row>

						<row>
							<entry>*</entry>
							<entry>To same loop level</entry>
						</row>
					</tbody>
				</tgroup>
			</table>
	</sect2>
	<sect2>
		<title>Fault-tolerant Loops</title>
		<para>Workflow components of a loop can fail. There are two kind of failures:<itemizedlist>
				<listitem>
					<para>A workflow component fails gracefully, i.e. it couldn't compute any results
						for the inputs received but works normally. In this case, it sends a value of
						type "not-a-value" with the specified cause to its outputs which finally are
						received by the driver workflow components as results.</para>
				</listitem>
				<listitem>
					<para>A workflow component fails, i.e. it crashes for an unexpected reason. In
						this case, the workflow engine sends values of type "not-a-value" with the
						specified cause as results to the driver workflow component.</para>
				</listitem>
			</itemizedlist></para>
		<para> In the "Fault Tolerance" configuration tab of workflow driver components, it can be
			configured how to handle failures in loops, for both kind of failures separately.</para>
	</sect2>
	<sect2 id="tool_result_verification">
		<title>Manual Tool Result Verification</title>
		<para>After the execution of an integrated tool, the results are sent via outputs to the
			next workflow component (e.g. to the next integrated tool). By default, this is done in
			an automated manner without any user interaction. If the data should be verified by a
			person responsible for the tool before they are sent further, manual verification of
			tool results must be enabled in the tool integration wizard in the 'Verification' tab of
			the 'Inputs and Outputs' page.</para>
		<para>In case manual verification of tool results is enabled, the results are hold after
			each tool execution and the corresponding workflow component remains in state "Waiting
			for approval". Then, there are two options:</para>
		<itemizedlist>
			<listitem>
				<para>Approve tool results: The tool results are sent via the outputs to the next
					workflow component and the workflow continues normally.</para>
			</listitem>
			<listitem>
				<para>Reject tool results: The tool results are not sent via the outputs to the next
					workflow component and the workflow is cancelled.</para>
			</listitem>
		</itemizedlist>
		<para>To apply one of the options, a so called verfication key is required. The verification key
			is generated by RCE after each tool execution and is written to a file on the file
			system of the machine which executed the tool. (The location is specified in the
			'Verification' tab of the 'Inputs and Outputs' page in the tool integration wizard.)
			Optionally, the verification key can also be sent via e-mail if e-mail support is
			configured for the RCE instance where the tool is integrated. (E-mail support can only
			be configured using the Configuration UI as described in <xref linkend="configuration_ui_smtp"/>) E-mail delivery can be enabled and the recipients can be
			defined in the 'Verification' tab of the 'Inputs and Outputs' page in the tool
			integration wizard.</para>
		<para>Once the verification key is known (either from the file or an e-mail), perform
			follwing steps to approve or reject the tools results:</para>
		<itemizedlist>
			<listitem>
				<para>Start an RCE instance with a graphical user interface. (Your tool must be
					available, i.e. it must appear in the palette of the workflow editor.)</para>
			</listitem>
			<listitem>
				<para>In the menu bar at the top, go to Run -> Verify tool results...</para>
			</listitem>
			<listitem>
				<para>A dialog appears that guides you through the verification process.</para>
			</listitem>
		</itemizedlist>
	</sect2>
</sect1>
