Tracking enables the simulation to extract values of variables from within arbitrary parts of the mesh.
There maybe multiple tracking objects defined and each one needs to define
the location to track (by a shape
subtable), the variables to track
(variable
subtable). The points in time when the values should be
evaluated need to be defined by a time_control
object, see
tem_timeControl_module for details.
And finally the format of the output needs to be given in the output
subtable.
Each tracking object also gets a label
to uniquely identify it, and a
folder
acts as a prefix, that gets prepended to all file names.
Further it is possible to define some reduction operation, for example to
build the average for the tracked variables over the complete shape, see
tem_reduction_spatial_module.
The tracking table might describe a single tracking object, or it may be a table of tracking objects. If there are multiple tracking objects these must be simply listed, without keywords in the form of:
tracking = {
{label = 'atrack', ...},
{label = 'btrack', ...},
{label = 'ctrack', ...},
}
If the table does not have this form, it will be assumed, that a single tracking object is defined.
Overview on the settings for the tracking object:
label
: A string to identify the tracking object, will be used to name
files. Defaults to 'unnamed_track'
.variable
: A bable of variable names that should be tracked. Needs to be
one of the available variables and has to be provided, ther is
no default.folder
: Actually a prefix that will be prepended to filenames. If it is
to be a directory, it has to end in the path seperator and
the directory has to exist already! Default: empty string, which
results in the tracking files being written into the current
working directory.reduction
: A spatial reduction that is to be applied across the complete
shape to arrive at a single value, see
tem_reduction_spatial_module for details. If reductions
are defined, there needs to be one for each variable that is
tracked by this tracking object. Default is to not do any
reduction.output
: The description of how the data is to be written. There are three
main options to format the output: ascii
, vtk
and
harvester
. The ascii
format is useful for timeseries at a
single point, that provides the point in time along with the
respective variable values in an ASCII text file, easily
processed by plotting tools.
The vtk
format is useful for larger shapes, like a slice
through the domain. It provides the mesh information along with
the values of the tracked variables.
The harvester
format writes the data of the subsection of the
mesh that corresponds to the tree in the same binary format as
used for restarting. The resulting data can then be processed by
the harvesting tool of the solver to create visualizations.
See the hvs_output_module for details on this subtable and
other format options.
This option has to be defined for each tracking object, there is
no default.shape
: Defines the part of the domain that is to be tracked by the
object.
There are various shapes available to define parts of the domain,
but the most basic and common ones are points, lines and boxes,
which we subsumize under the name canoND
.
Please see tem_shape_module for details.A simple, single tracking object definition without reduction looks like this:
tracking = {
label = 'track_pointA',
folder = './',
variable = {'momentum','density','energy'},
shape = {
kind = 'canoND',
object= {
origin ={0.01, 0, 0}
}
},
time_control = {
min = 0,
max = sim_control.time_control.max,
interval = {iter = 10}
},
output = {
format = 'ascii'
}
}
This tracks the variables momentum
, density
and energy
at a single
point over time and writes them every 10 iterations to disk with one line
per point in time.
See the dedicated tracking page for more examples and further hints.
General information about the tracking entities This data type is set in tem_load_tracking, then updated in tem_init_tracker_subTree After load balancing, it is reset in tem_reload_tracking
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
logical, | private | :: | active | = | .false. | output status, activated? |
|
integer, | private | :: | nActive | = | 0 | number of tracking entities active on this process |
|
integer, | private | :: | nDefined | = | 0 | Total number of tracking entities defined in config file |
Contains all config information about tracking Content in tracking config must NOT change!
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
character(len=labelLen), | private | :: | label | log object labels |
|||
character(len=pathLen), | private | :: | prefix | folder to store files to |
|||
character(len=labelLen), | private, | allocatable | :: | varName(:) | array of requested variable labels |
||
type(tem_timeControl_type), | private | :: | timeControl | stores time control parameters |
|||
type(tem_shape_type), | private, | allocatable | :: | geometry(:) | tracking shapes |
||
logical, | private | :: | track_complete_element | originally set to true. But if false the exact polynomial is evaluated at |
|||
type(hvs_output_config_type), | private | :: | output_config | Data loaded from output table |
|||
type(tem_reduction_spatial_config_type), | private | :: | redSpatial_config | Spatial reduction config which is loaded from disk |
Tracking entity definition
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
type(tem_varMap_type), | private | :: | varMap | Contains name and position of variables to track in global varSys number of found variables can be accessed by me%varMap%varPos%nVals |
|||
type(tem_subTree_type), | private | :: | subTree | sub-tree resulting from the elements within the tracking shape The sub-tree also holds the sub-communicator This data needs to be UPDATED after balance |
|||
type(hvs_output_file_type), | private | :: | output_file | Description for output file formats |
|||
integer, | private | :: | pntConfig | Pointer to config array in tem_tracking_type |
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
type(tem_trackingControl_type), | private | :: | control | General information about the tracking entities |
|||
type(tem_tracking_config_type), | private, | allocatable | :: | config(:) | tracking header for collecting the properties from the lua file |
||
type(tem_tracking_instance_type), | private, | allocatable | :: | instance(:) | Instances of tracking type active on this process |
Decision on whether the giving tracker should be written in the current iteration.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(tem_timeControl_type), | intent(inout) | :: | timeControl | |||
type(tem_simControl_type), | intent(in) | :: | simControl | |||
type(tem_comm_env_type), | intent(inout) | :: | proc |
Read the tracker configuration from the main lua file
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(tem_tracking_type), | intent(out) | :: | me | list of the trackingeentities to create |
||
type(flu_state) | :: | conf | handle of the lua config file |
|||
integer, | optional | :: | parent | if the tracking table is a child-table of some other table, use the parent as a reference |
Routine creates subTree for each tracking object and removes tracking objects on process which do not include any elements to track
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(tem_tracking_type), | intent(inout) | :: | me | tracking entities |
||
type(treelmesh_type), | intent(in) | :: | tree | Global mesh from which the elements are identified and then stored to sub-meshes inside the trackers |
||
type(tem_solveHead_type), | intent(in) | :: | solver | Global solver information |
||
type(tem_BC_prop_type), | intent(in) | :: | bc_prop | bc property that used to identify elements of certain BCs |
||
type(tem_stencilHeader_type), | intent(in), | optional | :: | stencil | stencil used to create subTree of boundary type |
|
character(len=labelLen), | intent(in), | optional | :: | prefix | Prefix for output filename Usually: solver%simName |
Initialize the tracker entities: * create varMap, i.e. map requested variables to global variable system * initialize spatial reduction * initialize hvs output
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(tem_tracking_type), | intent(inout) | :: | me | tracking entities |
||
type(treelmesh_type), | intent(in) | :: | tree | Global mesh from which the elements are identified and then stored to sub-meshes inside the trackers |
||
type(tem_solveHead_type), | intent(in) | :: | solver | Global solver information |
||
type(tem_varSys_type), | intent(in) | :: | varSys | solver-provided variable systems |
||
integer, | intent(in), | optional | :: | nDofs | The number of dofs for each scalar variable of the equation system |
|
type(tem_comm_env_type), | intent(in) | :: | globProc | Process description to use. |
||
integer, | intent(in), | optional | :: | solSpec_unit | Solver specific unit for restart header |
A routine to obtain tracked data.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(tem_varMap_type) | :: | varMap | varMap from tem_tracking_instance_type |
|||
type(tem_subTree_type) | :: | subTree | subTree from tem_tracking_instance_type |
|||
type(tem_varSys_type), | intent(in) | :: | varsys | Variable system describing available data. |
||
type(treelmesh_type), | intent(in) | :: | mesh | Mesh definition of the input data. |
||
type(tem_time_type), | intent(in) | :: | time | Time information for the current data. |
||
integer, | intent(in) | :: | nDofs | Number of degrees of freedom. |
||
real(kind=rk), | intent(out) | :: | res(:) | Tracked data, has to match the subtree definition. The memory layout is like this: 1. All variable components 2. nDofs 3. nElems (subtree%nElems) |
This routine runs over each tracking object and dump requested quantities if timeControl is active on current time
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(tem_tracking_type), | intent(inout) | :: | track | tracking object containing all tracking relevant information |
||
type(tem_simControl_type), | intent(in) | :: | simControl | Simulation control contains current simulation time and status bits |
||
type(tem_varSys_type), | intent(in) | :: | varSys | global variable system |
||
type(treelmesh_type), | intent(in) | :: | tree | global tree |
Close all the units of the tracking objects
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(tem_tracking_type), | intent(inout) | :: | me | tracker object to close |
Print the filenames of the last written VTK files on the screen.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(tem_tracking_type), | intent(in) | :: | track | List of tracking entities |
Read the tracker variables from tracking subtables defined in configuration from the main lua file
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(tem_tracking_config_type), | intent(out) | :: | config | list of the tracking entities to create |
||
type(flu_state) | :: | conf | handle of the lua config file |
|||
integer, | intent(in) | :: | sub_handle | table sub-handle for the tracking table |