Musubi-Harvesting

The former Harvester as a post-processing tool is not existing anymore. Instead, there is a new implementation of its functions inside Musubi itself. This one is called Musubi-Harvesting or shortly mus_harvesting.

This is why a few things in the handling of post-processing have changed. Inside the Musubi main folder is a sample script that can be used as a template. One can find it normally here: ~/apes/musubi/harvester.lua.

In the following, the usage of this tool will be explained.

At first, one can define the name of the simulation that will be a part of the filename of the produced files.

simulation_name = 'channel2D'

This basic information is read with the subroutine tem_load_general. It is stored inside params%solver%simName. The subroutine is called from mus_hvs_config_load.

After that, one provide the restart file that one would like to visualize:

restart = {read = 'restart/channel2D_lastHeader.lua'}

This character is stored inside tem_restartControl_type as 'readFileName'.

Then, one defines the verbosity of logging. tem_logging_load_primary is looking for the 'level'. Default is level = 1 in this case.

logging = { level = 1 }

Then one defines what shall be post-processed with mus_harvesting. Therefore the tracking table is needed.

tracking = {
  { -- opens sub table for one tracking element

To give the resulting files a useful name one can use the label. Moreover one can provide a special output folder. For both there are default values.

label = 'useful_name',
folder = 'here_is_your_output/',

But one must provide the output format of the files. There, one can choose between vtk, ascii and ascii_spatial. To visualize the data with Paraview one needs vtk:

output = { format = 'vtk' },

Then one can post-process every variable that is defined in the variable system as a default variable or 'special' ones like a difference that is used in the variable table of the Musubi config file. For more information one can have a look at this page.

variable = {'treeid','solidsphere','density','momentum'},

It is possible to define a region from where one can get the data. Therefore the shape table is used. In this example one gets the data for the whole domain. Another example of defining the shape can be found in tem_load_shape_single.

shape = { kind = 'all' },
} -- close tracking sub table
} -- close tracking table

One should not forget to close the tracking table. But after that the required setting is done. One can run the post-processor from the location of the config file:

~/apes/musubi/build/mus_harvesting harvester.lua

After that, one can visualise the output with Paraview. There is a tutorial for this software that one can find easily at Youtube.

The next part will be the tutorial for creating a dataset over all time steps.

Therefore one needs two files, the config file template harvest_series.template and the config file for the python script series.config.

The template file looks quite similar to the previously introduced harvester.lua. The first step is to make the use of data from the Musubi config file possible. With require one can provide the lua config file. Remember that the filename without the lua extension is needed here.

Next, one needs the restart input files. Here one makes use of the $!...!$ writing that indicates a placeholder that is configured inside the python script. $!file!$ is the placeholder for the input files.

After that, one defines the tracking in the same way like mentioned before. But for the output folder one can use the placeholder $!out!$.

require 'musubi'

restart.read = '$!file!$'
tracking = {
  {
    label = 'useful_name',
    variable = {'density'},
    shape = { kind = 'all' }, -- same as: shape = { kind = 'global' }
    folder = '$!out!$',
    output = { format = 'vtk' },
  }
}

After that, one configures the python input file that is called series.config. In this case one must define the input files, the output folder, the path to post-processor executable, the location of the template file, and the path to the lua executable.

# input files:
files: *_header_*.lua # for all header files
# Lua path:
lua: ~/apes/musubi/build/treelm/aotus/lua
# post processor:
harvester: ~/apes/musubi/build/mus_harvesting
# template file:
template: harvest_series.template
# output folder:
out: ./output/

One can run this script with:

~/apes/musubi/treelm/peons/harvest_series.py -c series.config

Another example of how to configure the harvester.lua file:

variable = {
  {
    name = 'velX',
    ncomponents = 1,
    vartype = 'operation',
    operation = {kind='extract',
                 input_varname = {'velocity'},
                 input_varindex = {1}
    }
  }
},
tracking = {
  {
    label = 'vtk',
    variable = {'velX'},
    shape = {kind = 'all'},
    output = {format = 'vtk'}
  }
}