## 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 - PE - 1 (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
   XXXXX
X
X
X
X

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