A new decomposition method 'multiNodeDecomp' which extends the capabilities of the multi-level decomposition method found within OpenFOAM while maintaining full backwards compatibility. The multiNodeDecomp allow users control over the properties of each node within the decomposition tree, as opposed to multi-level decomposition which supports level-based modifications.
The multiNodeDecomp method adds the following capabilities:
multiNodeCoeffs {
method metis;
domains (3 4);
domains[0] (8);
}
In the example above, the mesh will be decomposed into 3 domains, where the first domain (domain[0]) will be further decomposed into 8 subdomains, while the remaining 2 domains will be decomposed into 4 subdomains only. This will result in a total of 20 subdomains. Note that the user passes a list value, which allows to have a different number of levels under different branches of the decomposition tree.
weightsInitialization relative;
weight[0][3] 2;
'Uniform' initialization will recursively set all of the nodes weights to 1, while the 'Relative' initialization sets each nodes weight to the number of leaves in its decomposition subtree. The weight of a node is then used during its parent's decomposition to control the sub-mesh size it will receive.
method[2] {
method scotch;
coeffs {
...
}
}
This will overwrite the method of the third subdomain of the root to use scotch and the given coefficients.
multiNodeDecomp supports setting the decomposition properties above on a level scope (parameter[] value) or on a node scope (parameter[#nodeIndex] value). The square brackets indicate indices of the children we want to modify (0 based indexing). The user may specify ranges by using a hyphen ([0-3]) or specifying all of the children by using empty brackets ([]).