**metis_split#

Description#

This engine splits a given mesh through the following process by: i) build a graph representation of the mesh connectivity and, ii) call an external graph splitting library. Here, the mesh partitionning library used is the Metis package developed by the Computer Science Department at the University of Minnesota, and used by permission. Information on the Metis package is available on the Web at the link:

http://glaros.dtc.umn.edu/gkhome/views/metis/

Note

The use of this tool requires the Metis interface to be compiled, which can be checked by the presence of libZMetis in your library path.

Syntax#

The command has the following syntax:

**metis_split [ *domains num ] [ *split_by_face num ] [ *split_by_node num ] [ *weight_by_elsets nb_sets set\(_1 ~ \omega_1\) set\(_2 ~\omega_2\) ] [ *edge_weight_between_elsets nb_sets set11 set12 w1 set21 set22 w2 … ]

*domains

specifies the number of sub-domains to be used. In the absence of this subcommand, the default value of 12 will be taken.

*split_by_face

build a graph representation of the mesh based on faces connectivity, which implies that an edge will be created between two vertex (elements) whenever the corresponding elements share a common face (in 3d) or edge (in 2d). This guarantee that generated subdomains will not exhibit elements attached by less than a face in 3d or less than an edge in 2d and therefore avoid the use of extra check procedure such as *check_domains. This is the default behavior.

*split_by_node

build a graph representation of the mesh based on nodes connectivity, which implies that an edge will be created between two vertex (elements) whenever the corresponding elements share a common node. Although this speeds up the graph generation, such option should be used with care as it does not guarantee that generated subdomains will not exhibit elements attached by less than a face in 3d or less than an edge in 2d. The two previous commands are mutually exclusive.

*weight_by_elsets

gives the possibility to add weights to the elements in order to get a better load balancing. Typically, a large weight may be attributed to elements with highly nonlinear material law.

*edge_weight_between_elsets

gives the possibility to add weights to all edges between paires of elsets. Typically, in order to avoid some elements to be in the domain decomposition interface.

Example#

See the example given as introduction of this chapter.