As mentioned in section 4.3.1,
ScaLAPACK assumes a one-dimensional or
two-dimensional block-cyclic distribution
for the dense matrix computational routines.
The **block-cyclic distribution** is
a generalization of the block and cyclic
distributions. In one dimension, blocks
of rows of size *MB* or blocks of columns
of size *NB* are cyclically distributed
over the processes. In two dimensions,
blocks of size are
distributed cyclically over the processes.
Example programs can be found in
section 2.3 and
Appendix C.1.

According to the two-dimensional block
cyclic data distribution, scheme an `M_`
by `N_`
dense matrix is first decomposed into `MB_`
by `NB_`
blocks starting at its upper left corner.
These blocks are then uniformly distributed
in each dimension of the process grid. Thus,
every process owns a collection of blocks,
which are locally and contiguously stored
in a two-dimensional ``column major'' array.
The partitioning of a matrix into
blocks and the mapping
of these blocks onto a
process grid are shown in figure 4.6.
The local entries of every matrix
column are contiguously stored in
the processes' memories.

**Figure: 4.6** A matrix decomposed into
blocks mapped onto a process grid

The number of rows of a matrix
and the number of columns of a
matrix that a specific process
owns, denoted LOC and
LOC respectively, may
differ from process to process
in the process grid. Likewise,
there is a local leading
dimension `LLD_`
for each process in the process
grid. This value may be different
on each process in the process
grid. For example, we can see
on the right of figure 4.6
that the local array stored in
process row 0 must have a local
leading dimension `LLD_`
greater than or equal to 5, and
greater than or equal to 4 in the
process row 1.

**Table 4.8:** Sizes of the local arrays

Table 4.8 gives the values of the local array sizes associated with figure 4.6.

Tue May 13 09:21:01 EDT 1997