MatCreateLRC#

Creates a new matrix object that behaves like A + UCV’ of type MATLRC

Synopsis#

#include "petscmat.h" 
PetscErrorCode MatCreateLRC(Mat A, Mat U, Vec c, Mat V, Mat *N)

Collective

Input Parameters#

  • A - the (sparse) matrix (can be NULL)

  • U - dense rectangular (tall and skinny) matrix

  • V - dense rectangular (tall and skinny) matrix

  • c - a vector containing the diagonal of C (can be NULL)

Output Parameter#

  • N - the matrix that represents A + UCV’

Notes#

The matrix A + UCV’ is not formed! Rather the new matrix object performs the matrix-vector product MatMult(), by first multiplying by A and then adding the other term.

C is a diagonal matrix (represented as a vector) of order k, where k is the number of columns of both U and V.

If A is NULL then the new object behaves like a low-rank matrix UCV’.

Use V=U (or V=NULL) for a symmetric low-rank correction, A + UCU’.

If c is NULL then the low-rank correction is just U*V’. If a sequential c vector is used for a parallel matrix, PETSc assumes that the values of the vector are consistently set across processors.

See Also#

Matrices, Mat, MATLRC, MatLRCGetMats()

Level#

intermediate

Location#

src/mat/impls/lrc/lrc.c

Examples#

src/tao/pde_constrained/tutorials/elliptic.c


Edit on GitLab

Index of all Mat routines
Table of Contents for all manual pages
Index of all manual pages