# Distributed matricesΒΆ

The `DistMatrix<T,U,V>`

class is meant to provide a
distributed-memory analogue of the `Matrix<T>`

class.
In a manner similar to PLAPACK, roughly ten different matrix
distributions are provided and it is trivial (in the sense that it requires a
single command) to redistribute from one to another: in PLAPACK, one would
simply call `PLA_Copy`

, whereas, in Elemental, it is handled through
overloading the \(=\) operator (or instead calling the `Copy()`

function).

Since it is crucial to know not only how many
processes to distribute the data over, but *which* processes, and in what
manner they should be decomposed into a logical two-dimensional grid, an
instance of the `Grid`

class must be passed into the constructor of
the `DistMatrix<T,U,V>`

class.

Note

Since the `DistMatrix<T,U,V>`

class makes use of MPI for
message passing, custom interfaces must be written for nonstandard datatypes.
As of now, the following datatypes are fully supported for
`DistMatrix<T,U,V>`

:
`int`

, `float`

, `double`

, `Complex<float>`

, and `Complex<double>`

.

The `DistMatrix<T,U,V>`

class is implemented in a manner which
attempts to expose as many symmetries within the various member functions and
redistributions as possible. In particular, there are there is a hierarchy of
three increasingly-specific distributed matrix classes:
`AbstractDistMatrix<T>`

, which contains every member function which
whose prototype does not depend upon the exact matrix distribution,
`GeneralDistMatrix<T,U,V>`

, which contains every member function
whose prototype depends upon the particular matrix distribution but can still
be implemented in a generic way, and `DistMatrix<T,U,V>`

, which
contains implementations of member functions which are specific to a
particular matrix distribution.