pylops_mpi.basicoperators.MPIHStack#

class pylops_mpi.basicoperators.MPIHStack(ops, base_comm=<mpi4py.MPI.Intracomm object>, dtype=None)[source]#

MPI HStack Operator

Create a horizontal stack of a set of linear operators using MPI. Each rank must initialize this operator by providing one or more linear operators which will be computed within each rank. Both model and data vectors are of pylops_mpi.DistributedArray type.

Parameters:
opslist

One or more pylops.LinearOperator to be horizontally stacked.

base_commmpi4py.MPI.Comm, optional

Base MPI Communicator. Defaults to mpi4py.MPI.COMM_WORLD.

dtypestr, optional

Type of elements in input array.

Attributes:
shapetuple

Operator shape

Raises:
ValueError

If ops have different number of rows

Notes

An MPIHStack is composed of N linear operators stacked horizontally, represented by L. Each rank has one or more pylops.LinearOperator, which we represent here compactly as \(\mathbf{L}_i\) for rank \(i\).

Each operator performs forward mode operations using its corresponding model vector, denoted as m. This vector is effectively a pylops_mpi.DistributedArray, with partition set to pylops_mpi.Partition.SCATTER i.e. unique portions assigned to each rank.

Afterwards, a collective reduction operation is performed where matrix-vector product values from linear operators are summed up, and broadcasted to all ranks in the communicator, represented by d.

\[\begin{split}d = \begin{bmatrix} \mathbf{L}_1 & \mathbf{L}_2 & \ldots & \mathbf{L}_n \end{bmatrix} \begin{bmatrix} \mathbf{m}_1 \\ \mathbf{m}_2 \\ \vdots \\ \mathbf{m}_n \end{bmatrix}\end{split}\]

For the adjoint mode, each operator performs adjoint matrix-vector product using its corresponding model vector, denoted by m which is a pylops_mpi.DistributedArray with partition set to pylops_mpi.Partition.BROADCAST i.e. array is broadcasted to all ranks.

Afterwards, the result of the adjoint matrix-vector product is stored in a pylops_mpi.DistributedArray, which is represented by the variable d.

\[\begin{split}\begin{bmatrix} \mathbf{d}_1 \\ \mathbf{d}_2 \\ \vdots \\ \mathbf{d}_n \end{bmatrix} = \begin{bmatrix} \mathbf{L}_1^H \\ \mathbf{L}_2^H \\ \vdots \\ \mathbf{L}_n^H \end{bmatrix} m\end{split}\]

Methods

__init__(ops[, base_comm, dtype])

adjoint()

Adjoint MPI LinearOperator

conj()

Complex conjugate operator

dot(x)

Matrix Vector Multiplication

matvec(x)

Matrix-vector multiplication.

rmatvec(x)

Adjoint Matrix-vector multiplication.

transpose()

Transposition of MPI LinearOperator