#include "slepcbv.h" PetscErrorCode BVOrthogonalize(BV V,Mat R)Collective
V | - basis vectors to be orthogonalized (or B-orthogonalized), modified on output | |
R | - a sequential dense matrix (or NULL), on output the triangular factor of the QR decomposition |
If V has leading columns, then they are not modified (are assumed to be already orthonormal) and the leading columns of R are not referenced. Let the decomposition be
[ V01 V02 ] = [ V1 V2 ] [ R11 R12 ] [ 0 R22 ]then V1 is left unchanged (equal to V01) as well as R11 (it should satisfy V01 = V1*R11).
Can pass NULL if R is not required.
The method to be used for block orthogonalization can be set with BVSetOrthogonalization(). If set to GS, the computation is done column by column with successive calls to BVOrthogonalizeColumn(). Note that in the SVQB method the R factor is not upper triangular.
If V is rank-deficient or very ill-conditioned, that is, one or more columns are (almost) linearly dependent with respect to the rest, then the algorithm may break down or result in larger numerical error. Linearly dependent columns are essentially replaced by random directions, and the corresponding diagonal entry in R is set to (nearly) zero.