Module ppm_module_topo_metis_s2p

This module provides the decomposition routines.

Defined Types

name description

no types

Defined Module Interfaces

name description

ppm_topo_metis_s2p

Defined Module Subroutines

name description

no subroutines

Interface ppm_topo_metis_s2p

Subroutines contained in this interface:

name description

ppm_topo_metis_s2p_s

This routine assigns the subdomains to the processors

ppm_topo_metis_s2p_d

This routine assigns the subdomains to the processors

Subroutine ppm_topo_metis_s2p_d

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

[Note]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]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.

Arguments

name type dimension intent optional description

min_sub

real array

(:,:)

(IN)

Min. extent of all subdomains

max_sub

real array

(:,:)

(IN)

Max. extent of all subdomains

nneigh

integer array

(:)

(IN)

The number of neighbours of a subdomain

ineigh

integer array

(:,:)

(IN)

Pointers to these neighbours

cost

real array

(:)

(IN)

Costs of all subdomains (i.e. sum of particle/mesh node costs in

nsubs

integer

(IN)

Total number of subdomains

assig

integer

(IN)

METIS assignment type. One of:

sub2proc

integer array

(:)

Full list of processor affiliation of subdomains

isublist

integer array

(:)

List of subdomains assigned to the local processors

nsublist

integer

(OUT)

The number of subdomains assigned

info

integer

(OUT)

Returns status, 0 upon success

min_sub

real array, (:,:), (IN)

Min. extent of all subdomains

max_sub

real array, (:,:), (IN)

Max. extent of all subdomains

nneigh

integer array, (:), (IN)

The number of neighbours of a subdomain

ineigh

integer array, (:,:), (IN)

Pointers to these neighbours

cost

real array, (:), (IN)

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

nsubs

integer, , (IN)

Total number of subdomains

assig

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
sub2proc

integer array, (:), no intent declared

Full list of processor affiliation of subdomains

isublist

integer array, (:), no intent declared

List of subdomains assigned to the local processors

nsublist

integer, , (OUT)

The number of subdomains assigned

info

integer, , (OUT)

Returns status, 0 upon success

Used Modules

ppm_module_data, ppm_module_error, ppm_module_alloc, ppm_module_substop, ppm_module_write, ppm_module_substart

Subroutine ppm_topo_metis_s2p_s

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

[Note]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]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.

Arguments

name type dimension intent optional description

min_sub

real array

(:,:)

(IN)

Min. extent of all subdomains

max_sub

real array

(:,:)

(IN)

Max. extent of all subdomains

nneigh

integer array

(:)

(IN)

The number of neighbours of a subdomain

ineigh

integer array

(:,:)

(IN)

Pointers to these neighbours

cost

real array

(:)

(IN)

Costs of all subdomains (i.e. sum of particle/mesh node costs in

nsubs

integer

(IN)

Total number of subdomains

assig

integer

(IN)

METIS assignment type. One of:

sub2proc

integer array

(:)

Full list of processor affiliation of subdomains

isublist

integer array

(:)

List of subdomains assigned to the local processors

nsublist

integer

(OUT)

The number of subdomains assigned

info

integer

(OUT)

Returns status, 0 upon success

min_sub

real array, (:,:), (IN)

Min. extent of all subdomains

max_sub

real array, (:,:), (IN)

Max. extent of all subdomains

nneigh

integer array, (:), (IN)

The number of neighbours of a subdomain

ineigh

integer array, (:,:), (IN)

Pointers to these neighbours

cost

real array, (:), (IN)

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

nsubs

integer, , (IN)

Total number of subdomains

assig

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
sub2proc

integer array, (:), no intent declared

Full list of processor affiliation of subdomains

isublist

integer array, (:), no intent declared

List of subdomains assigned to the local processors

nsublist

integer, , (OUT)

The number of subdomains assigned

info

integer, , (OUT)

Returns status, 0 upon success

Used Modules

ppm_module_data, ppm_module_error, ppm_module_alloc, ppm_module_substop, ppm_module_write, ppm_module_substart

Defined Module Variables

name type dimension description

no variables

Used Modules

has no uses