10.4.5 Generate_Shell_Partition Procedure

The Generate_Shell_Partition procedure returns the cell numbering for a ``Shell Partitioning''. That is, it returns an array giving cell number as a function of i, j, and k. It is called internally by the Initialize_Shell_Partition procedure.

The idea behind a ``Shell Partitioning'' is to develop a numbering for a very bad partitioning. This can then be used to test algorithms to see how well they behave under adverse situations.

All the Shell Partitionings correspond to a structured, ``linear'', ``square'' or ``cubic'', mesh. The total size of the mesh is SizeNDimensions, where Size is any integer (and is equal to the number of processors) and NDimensions is 1, 2 or 3. Each processor then gets

PENDimensions - $\displaystyle \left(\vphantom{ \mbox{PE}-1 }\right.$PE - 1$\displaystyle \left.\vphantom{ \mbox{PE}-1 }\right)^{{\mbox{NDimensions}}}_{}$ (10.1)
cells, where PE is the processor number. The following is a conceptual description of what is happening. In 1-D, each PE gets one cell - an even partitioning. In 2-D each PE gets the newly added last column and last row of a square, for example
for processor 5. In 3-D, each PE gets the newly added top and two sides (three sides total) of a cube.

This routine provides a functional relationship for cell numbers by (i,j,k) triplet. The cell numbers are contiguous for a PE, e.g. in 3-D the first PE has number 1, the second PE has numbers 2-8, the third PE has numbers 9-27, etc.

Calling syntax:

call Generate_Shell_Partition  (c, i_of_c, j_of_c, k_of_c,
   NDimensions, NNodes_per_Side, Output)

Input variables:

 NDimensions  The number of dimensions (1=line, 2=square, 3=cube).
 NNodes_per_Side  The number of nodes in the line, or on the edges of the square or cube.
 Output  Output toggle.

Output variables:

 c  The cell numbers as a function of i, j, and k.
 i_of_c, j_of_c, k_of_c  The i, j, and k numbers for a particular cell number.

The Generate_Shell_Partition code listing contains additional documentation.

Michael L. Hall