Belos Package Browser (Single Doxygen Collection)
Development
|
TSQR-based OrthoManager subclass implementation. More...
#include <BelosTsqrOrthoManagerImpl.hpp>
Public Types | |
typedef Scalar | scalar_type |
typedef Teuchos::ScalarTraits < Scalar >::magnitudeType | magnitude_type |
typedef MV | multivector_type |
typedef Teuchos::SerialDenseMatrix < int, Scalar > | mat_type |
Type of the projection and normalization coefficients. More... | |
typedef Teuchos::RCP< mat_type > | mat_ptr |
Public Member Functions | |
Teuchos::RCP< const Teuchos::ParameterList > | getValidParameters () const |
Default valid parameter list. More... | |
void | setParameterList (const Teuchos::RCP< Teuchos::ParameterList > ¶ms) |
Set parameters from the given parameter list. More... | |
Teuchos::RCP< const Teuchos::ParameterList > | getFastParameters () |
Get "fast" parameters for TsqrOrthoManagerImpl. More... | |
TsqrOrthoManagerImpl (const Teuchos::RCP< Teuchos::ParameterList > ¶ms, const std::string &label) | |
Constructor (that sets user-specified parameters). More... | |
TsqrOrthoManagerImpl (const std::string &label) | |
Constructor (that sets default parameters). More... | |
void | setReorthogonalizationCallback (const Teuchos::RCP< ReorthogonalizationCallback< Scalar > > &callback) |
Set callback to be invoked on reorthogonalization. More... | |
void | setLabel (const std::string &label) |
Set the label for timers. More... | |
const std::string & | getLabel () const |
Get the label for timers (if timers are enabled). More... | |
void | innerProd (const MV &X, const MV &Y, mat_type &Z) const |
Euclidean inner product. More... | |
void | norm (const MV &X, std::vector< magnitude_type > &normVec) const |
Compute the 2-norm of each column j of X. More... | |
void | project (MV &X, Teuchos::Array< mat_ptr > C, Teuchos::ArrayView< Teuchos::RCP< const MV > > Q) |
Compute and . More... | |
int | normalize (MV &X, mat_ptr B) |
Orthogonalize the columns of X in place. More... | |
int | normalizeOutOfPlace (MV &X, MV &Q, mat_ptr B) |
Normalize X into Q*B, overwriting X. More... | |
int | projectAndNormalize (MV &X, Teuchos::Array< mat_ptr > C, mat_ptr B, Teuchos::ArrayView< Teuchos::RCP< const MV > > Q) |
Project X against Q and normalize X. More... | |
int | projectAndNormalizeOutOfPlace (MV &X_in, MV &X_out, Teuchos::Array< mat_ptr > C, mat_ptr B, Teuchos::ArrayView< Teuchos::RCP< const MV > > Q) |
Project and normalize X_in into X_out; overwrite X_in. More... | |
magnitude_type | orthonormError (const MV &X) const |
Return . More... | |
magnitude_type | orthogError (const MV &X1, const MV &X2) const |
Return the Frobenius norm of the inner product of X1 with itself. More... | |
magnitude_type | blockReorthogThreshold () const |
Relative tolerance for triggering a block reorthogonalization. More... | |
magnitude_type | relativeRankTolerance () const |
Relative tolerance for determining (via the SVD) whether a block is of full numerical rank. More... | |
Public Member Functions inherited from Teuchos::ParameterListAcceptorDefaultBase | |
RCP< ParameterList > | getNonconstParameterList () |
RCP< ParameterList > | unsetParameterList () |
RCP< const ParameterList > | getParameterList () const |
Private Types | |
typedef Teuchos::ScalarTraits < Scalar > | SCT |
typedef Teuchos::ScalarTraits < magnitude_type > | SCTM |
typedef MultiVecTraits< Scalar, MV > | MVT |
typedef MVT::tsqr_adaptor_type | tsqr_adaptor_type |
Private Member Functions | |
void | raiseReorthogFault (const std::vector< magnitude_type > &normsAfterFirstPass, const std::vector< magnitude_type > &normsAfterSecondPass, const std::vector< int > &faultIndices) |
Throw an exception indicating a reorthgonalization fault. More... | |
void | checkProjectionDims (int &ncols_X, int &num_Q_blocks, int &ncols_Q_total, const MV &X, Teuchos::ArrayView< Teuchos::RCP< const MV > > Q) const |
Return through output arguments some relevant dimension information about X and Q. More... | |
void | allocateProjectionCoefficients (Teuchos::Array< mat_ptr > &C, Teuchos::ArrayView< Teuchos::RCP< const MV > > Q, const MV &X, const bool attemptToRecycle=true) const |
Allocate projection coefficients. More... | |
int | projectAndNormalizeImpl (MV &X_in, MV &X_out, const bool outOfPlace, Teuchos::Array< mat_ptr > C, mat_ptr B, Teuchos::ArrayView< Teuchos::RCP< const MV > > Q) |
Implementation of projection and normalization. More... | |
void | rawProject (MV &X, Teuchos::ArrayView< Teuchos::RCP< const MV > > Q, Teuchos::ArrayView< mat_ptr > C) const |
One projection pass of X against the Q[i] blocks. More... | |
void | rawProject (MV &X, const Teuchos::RCP< const MV > &Q, const mat_ptr &C) const |
Overload of rawProject() for one Q block. More... | |
int | rawNormalize (MV &X, MV &Q, mat_type &B) |
One out-of-place normalization pass. More... | |
int | normalizeOne (MV &X, mat_ptr B) const |
Normalize a "multivector" of only one column. More... | |
int | normalizeImpl (MV &X, MV &Q, mat_ptr B, const bool outOfPlace) |
Normalize X into Q*B, with out-of-place option. More... | |
Private Attributes | |
Teuchos::RCP < Teuchos::ParameterList > | params_ |
Configuration parameters. More... | |
Teuchos::RCP< const Teuchos::ParameterList > | defaultParams_ |
Default configuration parameters. More... | |
std::string | label_ |
Label for timers (if timers are used). More... | |
tsqr_adaptor_type | tsqrAdaptor_ |
Interface to TSQR implementation. More... | |
Teuchos::RCP< MV > | Q_ |
Scratch space for TSQR. More... | |
magnitude_type | eps_ |
Machine precision for Scalar. More... | |
bool | randomizeNullSpace_ |
Whether to fill null space vectors with random data. More... | |
bool | reorthogonalizeBlocks_ |
Whether to reorthogonalize blocks at all. More... | |
bool | throwOnReorthogFault_ |
Whether to throw an exception on a orthogonalization fault. More... | |
magnitude_type | blockReorthogThreshold_ |
Relative reorthogonalization threshold in Block Gram-Schmidt. More... | |
magnitude_type | relativeRankTolerance_ |
Relative tolerance for measuring the numerical rank of a matrix. More... | |
bool | forceNonnegativeDiagonal_ |
Force R factor of normalization to have a nonnegative diagonal. More... | |
Teuchos::RCP < ReorthogonalizationCallback < Scalar > > | reorthogCallback_ |
Callback invoked if reorthogonalization is necessary. More... | |
Additional Inherited Members | |
Protected Member Functions inherited from Teuchos::ParameterListAcceptorDefaultBase | |
void | setMyParamList (const RCP< ParameterList > ¶mList) |
RCP< ParameterList > | getMyNonconstParamList () |
RCP< const ParameterList > | getMyParamList () const |
TSQR-based OrthoManager subclass implementation.
TsqrOrthoManagerImpl implements the interface defined by OrthoManager, as well as the interface defined by OutOfPlaceNormalizerMixin. We use TsqrOrthoManagerImpl to implement TsqrOrthoManager and TsqrMatOrthoManager.
Scalar | The type of matrix and (multi)vector entries. |
MV | The type of (multi)vector inputs and outputs. |
This class uses a combination of Tall Skinny QR (TSQR) and Block Gram-Schmidt (BGS) to orthogonalize multivectors. The Block Gram-Schmidt procedure used here is inspired by that of G. W. Stewart ("Block Gram-Schmidt Orthogonalization", SISC vol 31 #1 pp. 761–775, 2008). The difference is that we use TSQR+SVD instead of Stewart's careful Gram-Schmidt with reorthogonalization to handle the current block. "Orthogonalization faults" (as defined by Stewart) may still happen, but we do not handle them by default. Rather, we make one BGS pass, do TSQR+SVD, check the resulting column norms, and make a second BGS pass (+ TSQR+SVD) if necessary. If we then detect an orthogonalization fault, we throw TsqrOrthoFault.
Definition at line 156 of file BelosTsqrOrthoManagerImpl.hpp.
typedef Scalar Belos::TsqrOrthoManagerImpl< Scalar, MV >::scalar_type |
Definition at line 159 of file BelosTsqrOrthoManagerImpl.hpp.
typedef Teuchos::ScalarTraits<Scalar>::magnitudeType Belos::TsqrOrthoManagerImpl< Scalar, MV >::magnitude_type |
Definition at line 160 of file BelosTsqrOrthoManagerImpl.hpp.
typedef MV Belos::TsqrOrthoManagerImpl< Scalar, MV >::multivector_type |
Definition at line 161 of file BelosTsqrOrthoManagerImpl.hpp.
typedef Teuchos::SerialDenseMatrix<int, Scalar> Belos::TsqrOrthoManagerImpl< Scalar, MV >::mat_type |
Type of the projection and normalization coefficients.
Definition at line 163 of file BelosTsqrOrthoManagerImpl.hpp.
typedef Teuchos::RCP<mat_type> Belos::TsqrOrthoManagerImpl< Scalar, MV >::mat_ptr |
Definition at line 164 of file BelosTsqrOrthoManagerImpl.hpp.
|
private |
Definition at line 167 of file BelosTsqrOrthoManagerImpl.hpp.
|
private |
Definition at line 168 of file BelosTsqrOrthoManagerImpl.hpp.
|
private |
Definition at line 169 of file BelosTsqrOrthoManagerImpl.hpp.
|
private |
Definition at line 170 of file BelosTsqrOrthoManagerImpl.hpp.
Belos::TsqrOrthoManagerImpl< Scalar, MV >::TsqrOrthoManagerImpl | ( | const Teuchos::RCP< Teuchos::ParameterList > & | params, |
const std::string & | label | ||
) |
Constructor (that sets user-specified parameters).
params | [in/out] Configuration parameters, both for this orthogonalization manager, and for TSQR itself (as the "TSQR
implementation" sublist). This can be null, in which case default parameters will be set for now; you can always call setParameterList() later to change these. |
label | [in] Label for timers. This only matters if the compile-time option for enabling timers is set. |
Call getValidParameters()
for default parameters and their documentation, including TSQR implementation parameters. Call getFastParameters()
to get documented parameters for faster computation, possibly at the expense of accuracy and robustness.
Definition at line 764 of file BelosTsqrOrthoManagerImpl.hpp.
Belos::TsqrOrthoManagerImpl< Scalar, MV >::TsqrOrthoManagerImpl | ( | const std::string & | label | ) |
Constructor (that sets default parameters).
label | [in] Label for timers. This only matters if the compile-time option for enabling timers is set. |
Definition at line 787 of file BelosTsqrOrthoManagerImpl.hpp.
|
virtual |
Default valid parameter list.
Get a (pointer to a) default list of parameters for configuring a TsqrOrthoManagerImpl instance.
Reimplemented from Teuchos::ParameterListAcceptor.
Definition at line 1409 of file BelosTsqrOrthoManagerImpl.hpp.
|
virtual |
Set parameters from the given parameter list.
Implements Teuchos::ParameterListAcceptor.
Definition at line 705 of file BelosTsqrOrthoManagerImpl.hpp.
Teuchos::RCP< const Teuchos::ParameterList > Belos::TsqrOrthoManagerImpl< Scalar, MV >::getFastParameters | ( | ) |
Get "fast" parameters for TsqrOrthoManagerImpl.
Get a (pointer to a) list of parameters for configuring a TsqrOrthoManager or TsqrMatOrthoManager instance for maximum speed, at the cost of accuracy (no block reorthogonalization) and robustness to rank deficiency (no randomization of the null space basis).
Definition at line 1474 of file BelosTsqrOrthoManagerImpl.hpp.
|
inline |
Set callback to be invoked on reorthogonalization.
This callback is invoked right after the first projection step, and only if reorthogonalization will be necessary. It is called before actually reorthogonalizing. The first argument is a Teuchos::ArrayView of the norms of the columns of the input multivector before the first projection pass, and the second argument is a Teuchos::ArrayView of their norms after the first projection pass.
The callback is null by default. If the callback is null, no callback will be invoked.
For details and suggested uses, please refer to the documentation of ReorthogonalizationCallback
.
Definition at line 242 of file BelosTsqrOrthoManagerImpl.hpp.
|
inline |
Set the label for timers.
This only matters if timers are enabled. If timers are enabled and the label changes, this method will clear the old timers and replace them with new ones. The old timers will not appear in the list of timers shown by Teuchos::TimeMonitor::summarize()
.
Definition at line 254 of file BelosTsqrOrthoManagerImpl.hpp.
|
inline |
Get the label for timers (if timers are enabled).
Definition at line 271 of file BelosTsqrOrthoManagerImpl.hpp.
|
inline |
Euclidean inner product.
Compute the Euclidean block inner product X^* Y, and store the result in Z.
X | [in] |
Y | [in] |
Z | [out] On output, |
Definition at line 282 of file BelosTsqrOrthoManagerImpl.hpp.
void Belos::TsqrOrthoManagerImpl< Scalar, MV >::norm | ( | const MV & | X, |
std::vector< magnitude_type > & | normVec | ||
) | const |
Compute the 2-norm of each column j of X.
X | [in] Multivector for which to compute column norms. |
normVec | [out] On output: normvec[j] is the 2-norm of column j of X. normVec is resized if necessary so that it has at least as many entries as there are columns of X. |
Definition at line 810 of file BelosTsqrOrthoManagerImpl.hpp.
void Belos::TsqrOrthoManagerImpl< Scalar, MV >::project | ( | MV & | X, |
Teuchos::Array< mat_ptr > | C, | ||
Teuchos::ArrayView< Teuchos::RCP< const MV > > | Q | ||
) |
Compute and .
Project X against the span of the (Euclidean) orthogonal vectors Q, and store the resulting coefficients in C.
X | [in/out] On input: the vectors to project. On output: where . |
C | [out] The projection coefficients |
Q | [in] The orthogonal basis against which to project |
Definition at line 822 of file BelosTsqrOrthoManagerImpl.hpp.
int Belos::TsqrOrthoManagerImpl< Scalar, MV >::normalize | ( | MV & | X, |
mat_ptr | B | ||
) |
Orthogonalize the columns of X in place.
Orthogonalize the columns of X in place, storing the resulting coefficients in B. Return the rank of X. If X is full rank, then X*B on output is a QR factorization of X on input. If X is not full rank, then the first rank columns of X on output form a basis for the column space of X (on input). Additional options control randomization of the null space basis.
X | [in/out] |
B | [out] |
Definition at line 901 of file BelosTsqrOrthoManagerImpl.hpp.
int Belos::TsqrOrthoManagerImpl< Scalar, MV >::normalizeOutOfPlace | ( | MV & | X, |
MV & | Q, | ||
mat_ptr | B | ||
) |
Normalize X into Q*B, overwriting X.
Normalize X into Q*B, overwriting X with invalid values.
X | [in/out] Vector(s) to normalize |
Q | [out] Normalized vector(s) |
B | [out] Normalization coefficients |
Definition at line 1019 of file BelosTsqrOrthoManagerImpl.hpp.
|
inline |
Project X against Q and normalize X.
This method is equivalent (in exact arithmetic) to project(X,C,Q) followed by normalize(X,B). However, the interface allows this method to implement reorthogonalization more efficiently and accurately.
X | [in/out] The vectors to project against Q and normalize |
C | [out] The projection coefficients |
B | [out] The normalization coefficients |
Q | [in] The orthogonal basis against which to project |
Definition at line 371 of file BelosTsqrOrthoManagerImpl.hpp.
|
inline |
Project and normalize X_in into X_out; overwrite X_in.
Project X_in against Q, storing projection coefficients in C, and normalize X_in into X_out, storing normalization coefficients in B. On output, X_out has the resulting orthogonal vectors and X_in is overwritten with invalid values.
X_in | [in/out] On input: The vectors to project against Q and normalize. On output: Overwritten with invalid values. |
X_out | [out] The normalized input vectors after projection against Q. |
C | [out] Projection coefficients |
B | [out] Normalization coefficients |
Q | [in] The orthogonal basis against which to project |
normalizeOutOfPlace()
. Definition at line 401 of file BelosTsqrOrthoManagerImpl.hpp.
|
inline |
Return .
Return the Frobenius norm of I - X^* X, which is an absolute measure of the orthogonality of the columns of X.
Definition at line 417 of file BelosTsqrOrthoManagerImpl.hpp.
|
inline |
Return the Frobenius norm of the inner product of X1 with itself.
Definition at line 431 of file BelosTsqrOrthoManagerImpl.hpp.
|
inline |
Relative tolerance for triggering a block reorthogonalization.
If any column norm in a block decreases by this amount, then we reorthogonalize.
Definition at line 444 of file BelosTsqrOrthoManagerImpl.hpp.
|
inline |
Relative tolerance for determining (via the SVD) whether a block is of full numerical rank.
Definition at line 448 of file BelosTsqrOrthoManagerImpl.hpp.
|
private |
Throw an exception indicating a reorthgonalization fault.
Definition at line 1388 of file BelosTsqrOrthoManagerImpl.hpp.
|
private |
Return through output arguments some relevant dimension information about X and Q.
ncols_X | [out] Number of columns in X |
num_Q_blocks | [out] Number of entries in the Q array |
ncols_Q_total | [out] Total number of columns in all the entries of Q |
X | [in] Multivector to project against the Q[i] |
Q | [in] Array of multivectors against which to project X |
Definition at line 1877 of file BelosTsqrOrthoManagerImpl.hpp.
|
private |
Allocate projection coefficients.
C | [out] Array of projection coefficient matrices |
Q | [in] Array of MV against which to project |
X | [in] MV to project against the entries of Q |
attemptToRecycle | [in] Hint whether to check the existing entries of C to see if they have already been allocated and have the right dimensions. This function will do the right thing regardless, but the hint might improve performance by avoiding unnecessary allocations or checks. |
Definition at line 979 of file BelosTsqrOrthoManagerImpl.hpp.
|
private |
Implementation of projection and normalization.
Implementation of projectAndNormalize()
(in which case X_out is not read or written, so it may alias X_in, and outOfPlace==false) and projectAndNormalizeOutOfPlace()
(in which case X_out is written, and outOfPlace==true).
Definition at line 1052 of file BelosTsqrOrthoManagerImpl.hpp.
|
private |
One projection pass of X against the Q[i] blocks.
Perform one projection pass (Modified Block Gram-Schmidt) of X against the Q[i] blocks. Does not allocate C[i] coefficients, and does not reorthogonalize.
|
private |
Overload of rawProject()
for one Q block.
|
private |
One out-of-place normalization pass.
Compute one normalization pass of X into Q*B. Overwrite X with invalid values.
X | [in/out] On input: multivector whose columns are to be orthogonalized ("normalized"). On output: overwritten with invalid values. |
Q | [out] The orthogonalized ("normalized") columns of X. If X on input had (numerical) rank r, the first r columns are a column space basis for X, and the remaining columns are a null space basis for X. |
B | [out] Normalization coefficients: X = Q*B. If X on input had full (numerical) rank, B is upper triangular. Otherwise, B may not be upper triangular, but the factorization X = Q*B is still valid. |
Definition at line 1502 of file BelosTsqrOrthoManagerImpl.hpp.
|
private |
Normalize a "multivector" of only one column.
Special case of normalize() when X has only one column. The operation is done in place in X. We assume that B(0,0) makes sense, since we're going to assign to it.
X | [in/out] On input: multivector of one column. On output: if that column has nonzero 2-norm, the column scaled by its 2-norm; otherwise, if the column has zero 2-norm, it is not modified. |
B | [out] Matrix of dimension 1 x 1. On output, the 2-norm of X. |
Definition at line 1524 of file BelosTsqrOrthoManagerImpl.hpp.
|
private |
Normalize X into Q*B, with out-of-place option.
If outOfPlace is true, write the normalized vectors to Q, leaving the contents of X invalid. Otherwise, write the normalized vectors to X, leaving the contents of Q invalid. Regardless, if X on input had (numerical) rank r, the first r normalized vectors are a column space basis for X, and the remaining vectors are a null space basis for X.
X | [in/out] On input: multivector whose columns are to be orthogonalized ("normalized"). On output: if outOfPlace, overwritten with invalid values; else, the normalized vector(s). |
Q | [out] If outOfPlace, overwritten with invalid values; else, the normalized vector(s). |
B | [out] Normalization coefficients: X = Q*B. If X on input had full (numerical) rank, B is upper triangular. Otherwise, B may not be upper triangular, but the factorization X = Q*B is still valid. |
Definition at line 1641 of file BelosTsqrOrthoManagerImpl.hpp.
|
private |
Configuration parameters.
Definition at line 452 of file BelosTsqrOrthoManagerImpl.hpp.
|
mutableprivate |
Default configuration parameters.
Definition at line 455 of file BelosTsqrOrthoManagerImpl.hpp.
|
private |
Label for timers (if timers are used).
Definition at line 458 of file BelosTsqrOrthoManagerImpl.hpp.
|
private |
Interface to TSQR implementation.
Definition at line 461 of file BelosTsqrOrthoManagerImpl.hpp.
|
private |
Scratch space for TSQR.
This multivector scratch space is allocated lazily, only if normalize() is called with a multivector input having more than one column. We do our best to avoid reallocation and recycle this space whenever possible. The normalizeOutOfPlace()
method does not allocate Q_, which you can use to your advantage if you already have scratch space allocated.
Definition at line 472 of file BelosTsqrOrthoManagerImpl.hpp.
|
private |
Machine precision for Scalar.
Definition at line 475 of file BelosTsqrOrthoManagerImpl.hpp.
|
private |
Whether to fill null space vectors with random data.
If so, this happens after normalization.
Definition at line 480 of file BelosTsqrOrthoManagerImpl.hpp.
|
private |
Whether to reorthogonalize blocks at all.
Reorthogonalization is conditional, based on the block reorthogonalization threshold. Tests for reorthogonalization only happen if this Boolean is set.
Definition at line 487 of file BelosTsqrOrthoManagerImpl.hpp.
|
private |
Whether to throw an exception on a orthogonalization fault.
Recovery is possible, but expensive.
Definition at line 492 of file BelosTsqrOrthoManagerImpl.hpp.
|
private |
Relative reorthogonalization threshold in Block Gram-Schmidt.
Definition at line 495 of file BelosTsqrOrthoManagerImpl.hpp.
|
private |
Relative tolerance for measuring the numerical rank of a matrix.
Definition at line 498 of file BelosTsqrOrthoManagerImpl.hpp.
|
private |
Force R factor of normalization to have a nonnegative diagonal.
If true, then (if necessary) do extra work (modifying both the Q and R factors) in the normalization step in order to force the R factor of the current block to have a nonnegative diagonal.
Definition at line 506 of file BelosTsqrOrthoManagerImpl.hpp.
|
private |
Callback invoked if reorthogonalization is necessary.
Definition at line 520 of file BelosTsqrOrthoManagerImpl.hpp.