This module provides the decomposition routines.

name | description |
---|---|

Subroutines contained in this interface:

name | description |
---|---|

This routine assigns the subdomains to the processors | |

This routine assigns the subdomains to the processors |

This routine assigns the subdomains to the processors using the METIS grid partitioning library.

Note | |
---|---|

Uses ppm_myeps for real comparisons in order to decide if two points are the same. Checks these decisions using the ineigh list. |

The corner numbering is currently done using a full search. This is inefficient and should maybe be replaced with some more clever algorithm.

Note | |
---|---|

Currently, we make no use of link (graph edges) weight as well as communication weights (number of ghost particles/mesh points that need to be sent for each edgecut). There is definitely room for improvement here to get even better load balancing. |

name | type | dimension | intent | optional | description |
---|---|---|---|---|---|

real array | (:,:) | (IN) | Min. extent of all subdomains | ||

real array | (:,:) | (IN) | Max. extent of all subdomains | ||

integer array | (:) | (IN) | The number of neighbours of a subdomain | ||

integer array | (:,:) | (IN) | Pointers to these neighbours | ||

real array | (:) | (IN) | Costs of all subdomains (i.e. sum of particle/mesh node costs in | ||

integer | (IN) | Total number of subdomains | |||

integer | (IN) | METIS assignment type. One of: | |||

integer array | (:) | Full list of processor affiliation of subdomains | |||

integer array | (:) | List of subdomains assigned to the local processors | |||

integer | (OUT) | The number of subdomains assigned | |||

integer | (OUT) | Returns status, 0 upon success |

real array, `(:,:)`

, (IN)

Min. extent of all subdomains

real array, `(:,:)`

, (IN)

Max. extent of all subdomains

integer array, `(:)`

, (IN)

The number of neighbours of a subdomain

integer array, `(:,:)`

, (IN)

Pointers to these neighbours

real array, `(:)`

, (IN)

Costs of all subdomains (i.e. sum of particle/mesh node costs in that subdomain. Used for weighting the assignment.

integer, , (IN)

Total number of subdomains

integer, , (IN)

METIS assignment type. One of:

- ppm_param_assign_nodal_cut
- ppm_param_assign_nodal_comm
- ppm_param_assign_dual_cut
- ppm_param_assign_dual_comm

integer array, `(:)`

, no intent declared

Full list of processor affiliation of subdomains

integer array, `(:)`

, no intent declared

List of subdomains assigned to the local processors

integer, , (OUT)

The number of subdomains assigned

integer, , (OUT)

Returns status, 0 upon success

ppm_module_data, ppm_module_error, ppm_module_alloc, ppm_module_substop, ppm_module_write, ppm_module_substart

This routine assigns the subdomains to the processors using the METIS grid partitioning library.

Note | |
---|---|

Uses ppm_myeps for real comparisons in order to decide if two points are the same. Checks these decisions using the ineigh list. |

The corner numbering is currently done using a full search. This is inefficient and should maybe be replaced with some more clever algorithm.

Note | |
---|---|

Currently, we make no use of link (graph edges) weight as well as communication weights (number of ghost particles/mesh points that need to be sent for each edgecut). There is definitely room for improvement here to get even better load balancing. |

name | type | dimension | intent | optional | description |
---|---|---|---|---|---|

real array | (:,:) | (IN) | Min. extent of all subdomains | ||

real array | (:,:) | (IN) | Max. extent of all subdomains | ||

integer array | (:) | (IN) | The number of neighbours of a subdomain | ||

integer array | (:,:) | (IN) | Pointers to these neighbours | ||

real array | (:) | (IN) | Costs of all subdomains (i.e. sum of particle/mesh node costs in | ||

integer | (IN) | Total number of subdomains | |||

integer | (IN) | METIS assignment type. One of: | |||

integer array | (:) | Full list of processor affiliation of subdomains | |||

integer array | (:) | List of subdomains assigned to the local processors | |||

integer | (OUT) | The number of subdomains assigned | |||

integer | (OUT) | Returns status, 0 upon success |

real array, `(:,:)`

, (IN)

Min. extent of all subdomains

real array, `(:,:)`

, (IN)

Max. extent of all subdomains

integer array, `(:)`

, (IN)

The number of neighbours of a subdomain

integer array, `(:,:)`

, (IN)

Pointers to these neighbours

real array, `(:)`

, (IN)

Costs of all subdomains (i.e. sum of particle/mesh node costs in that subdomain. Used for weighting the assignment.

integer, , (IN)

Total number of subdomains

integer, , (IN)

METIS assignment type. One of:

- ppm_param_assign_nodal_cut
- ppm_param_assign_nodal_comm
- ppm_param_assign_dual_cut
- ppm_param_assign_dual_comm

integer array, `(:)`

, no intent declared

Full list of processor affiliation of subdomains

integer array, `(:)`

, no intent declared

List of subdomains assigned to the local processors

integer, , (OUT)

The number of subdomains assigned

integer, , (OUT)

Returns status, 0 upon success

ppm_module_data, ppm_module_error, ppm_module_alloc, ppm_module_substop, ppm_module_write, ppm_module_substart