The implementation is based on the SPartA Algorithm.
Some elements which require further
treatment expose higher computational effort. This includes among others the
enforcing of boundary conditions, source terms, or the interpolation between
levels. Depending on the selected behavior of elements, this result in
considerable higher effort on certain elements.
When running in parallel, it is important to balance the load between the
participating processing units equally in order to achieve a minimal time to
solution. It is always desired to minimize the waiting time of processing
units.
The initial disitribution of the elements among the processes assigns the
roughly the same amount of elements to each partition, regardless of their
cost.
This simple partitioning yields very good results for uniform grid
simulations, as the elements with additional behavior is of the order of
while the total number of elements are of order
.
Especially when using locally refined grids, the computational cost of
elements varies considerably. Besides the increased update interval of the
smaller elements, the interpolation routines are very expensive compared to
the pure computation of an element.
To account for this variation of the computational cost, a load balancing
algorithm (see: [2] at Treelm bibliography) is employed to homogenize
the total cost among the partitions. It is based on a space-filling curve,
which fits nicely into the TreElm framework. Additionally, each element of
the tree is assigned a weight representing the computational cost. The total
cost is then possibly equally distributed among the partitions which results
in a re-partitioning of the mesh along the space-filling curve.
Nodes of different colours represent the following:
Solid arrows point from a submodule to the (sub)module which it is
descended from. Dashed arrows point from a module or program unit to
modules which it uses.
Nodes of different colours represent the following:
Solid arrows point from a submodule to the (sub)module which it is
descended from. Dashed arrows point from a module or program unit to
modules which it uses.