We can keep maintenance simple using a single "task wrapper file", called in multiple contexts, for multiple tasks. It can be seen as a single task in research mode, for example, while it is used to generated multiple tasks in parallel in operation so we can get the expected data faster.
%manual %end %include <head.h> if [[ %PARALLEL:1% == 1 ]]; then for param in %PARAMS:2t u v rh%; do # process: create ${param}.grib done fi if [[ %SERIAL:1% == 1 ]]; then for param in %PARAMS:2t u v rh%; do # push into fields data base done fi %include <tail.h> |
suite example family parallel edit PARALLEL 1 edit SERIAL 0 limit count 5 inlimit count family 2t edit PARAM 2t task process endfamily family u edit PARAM u task process endfamily family v edit PARAM v task process endfamily family rh edit PARAM rf task process endfamily endfamily # process family serial trigger parallel eq complete edit PARALLEL 0 edit SERIAL 1 task process |
A real case example is given by the family ensms (ensenble mean statistics) where few parameters and multiple level shall generate tasks and grib files in parallel, while a single task by the end moves the grib files into the fields data base ("limit em 1" is used as a mutex)