In order to benefit from in situ visualization with VisIt, you should install it first as described earlier here in this tutorial. Then follow the compilation and installation process of Damaris presented before (Check here) and enable VisIt by providing the VISIT_ROOT variable (set it to VisIt installation directory) in the CMakeLists.txt.
Warning: libsimV2 seems to have some problems on some platforms. We successfully tested Damaris with VisIt 2.5.2, 2.8.0 and 2.10.3. Versions earlier than 2.5.2 will not work with Damaris, and due to various bugs in libsimV2, we haven’t managed to run Damaris with any of the versions between 2.5.2 and 2.8.0. Version 2.8.0 seems to still suffer from problems on some platforms. As a result, the latest tested versions that you can use with Damaris are 2.10.3 and recently 2.13.0.
VisIt options
VisIt has to be enabled through the configuration file as shown below. The <path> tag locates the installation directory of VisIt and it is used by the simulation to load VisIt plugins. The <options> tag provides an equivalent to VisIt command line options (see the VisIt manual). Most of the time, the <options> tag is not required.
1 2 3 4 | <visit> <path>/path/to/visit2.13.0/src</path> <options> -debug 5 </options> </visit> |
Description of meshes, curves and fields
In this part of the tutorial, you will learn how to define meshes, curves and fields using the XML configuration files.
Meshes
The current version of Damaris supports the following meshes: rectilinear meshes, curvilinear meshes, and point meshes. This section shows how to expose a mesh and how to map a variable onto a mesh. Just like other Damaris objects, meshes have to be described in the XML file, as shown below. This kind of description should be placed in the <data> section of the configuration, at the root or within any subgroup.
1 2 3 4 | <mesh name="mesh2d" type="rectilinear" topology="2"> <coord name="x2d" unit="cm" label="Width"/> <coord name="y2d" unit="cm" label="Height"/> </mesh> |
A mesh is characterized by a name, a type (currently only “rectilinear”, “curvilinear” or “point” are allowed), and a topological dimension (for instance a surface in a 3D space is characterized by three coordinates for each of its points, but has a 2D topology).
Finally two to three coordinates have to be provided through the <data> tag. These coordinates refer to existing variables from the configuration. The name of these variables can be absolute or relative, as it is searched the same way a variable searches its layout. The unit of a coordinate, when provided, hides the unit of the corresponding variable. The label is used when drawing figures.
Fields
A field is a value that can be placed on each node or each zone of a mesh. To allow a described variable to be mapped onto a mesh, some new attributes have to be added in its description. The below listing shows the description of a variable with attributes related to visualization.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <data> <group name="my group"> <variable name="temperature" layout="my layout" visualizable="true" type="scalar" mesh="my mesh" unit="K" centering="nodal" time-varying="true" /> </group> </data> |
The most important attribute is mesh, which is a reference to an existing mesh on which to draw the field. This reference should be an absolute name (Damaris is not yet capable of searching for a local mesh within the group where the variable is defined). The centering attribute can be either “nodal” (values correspond to vertices of the mesh) or “zonal” (values correspond to zones in the mesh). The type should be “scalar” (other types are not yet supported by Damaris).
By default, visualizable and time-varying are already set to “true”, unit can be omitted. The other attributes (type and centering) can be omitted if the variable is not concerned by visualization. As a rule of thumb, variables that serve as coordinates in meshes are not visualizable, while other variables are considered as fields and are visualizable, thus must have an attached mesh.
Curves
Damaris can expose curves as the same way it exposes meshes. The following listing shows how to expose a curve. A curve has exactly two coordinates (the x and y coordinates of the points of the curve) referring to variables the same way meshes use coordinate variables. An important difference between meshes and curves is that a curve is only produced by the client 0 of the simulation. That is, only this client has to write the coordinate variables. If other clients write coordinate variables, they will be discarded by VisIt.
1 2 3 4 | <curve name="my curve"> <coord name="x_curve " unit="cm" label="t"/> <coord name="y_curve" unit="cm" label="f(t)"/> </curve> |
External actions and interactivity
Events can be set as “external” by adding the external=”true” attribute to their description. An external event can be fired from the VisIt client itself. These events are exposed as commands and are accessible through the VisIt viewer’s commands interface. Clicking on a command will trigger the corresponding event in all dedicated processes (or all processes in synchronous mode). It is ensured that all the actions will be triggered at the same time, thus the actions can safely use global communications using MPI. Triggering an event from VisIt is equivalent to sending a “bcast”-type event from a client.