42 #ifndef _TEUCHOS_SERIALDENSEHELPERS_HPP_ 43 #define _TEUCHOS_SERIALDENSEHELPERS_HPP_ 52 #include "Teuchos_Assert.hpp" 58 #include "Teuchos_CommHelpers.hpp" 59 #include "Teuchos_DefaultComm.hpp" 60 #include "Teuchos_DefaultSerialComm.hpp" 75 template<
typename OrdinalType,
typename ScalarType>
81 OrdinalType A_nrowcols = A.
numRows();
82 OrdinalType B_nrowcols = (ETranspChar[transw]!=
'N') ? W.
numCols() : W.
numRows();
83 OrdinalType W_nrows = (ETranspChar[transw]!=
'N') ? W.
numRows() : W.
numCols();
84 OrdinalType W_ncols = (ETranspChar[transw]!=
'N') ? W.
numCols() : W.
numRows();
86 bool isBUpper = B.
upper();
90 "Teuchos::symMatTripleProduct<>() : " 91 "Num Rows/Cols B (" << B.
numRows() <<
") inconsistent with W ("<< B_nrowcols <<
")");
93 "Teuchos::symMatTripleProduct<>() : " 94 "Num Rows/Cols A (" << A_nrowcols <<
") inconsistent with W ("<< W_nrows <<
")");
112 if (ETranspChar[transw]!=
'N') {
121 for (OrdinalType j=0; j<B_nrowcols; ++j)
122 blas.
GEMV( transw, W_nrows, j+1, one, W.
values(), W.
stride(), AW[j], 1, zero, &B(0,j), 1 );
125 for (OrdinalType j=0; j<B_nrowcols; ++j)
126 blas.
GEMV( transw, W_nrows, B_nrowcols-j, one, W[j], W.
stride(), AW[j], 1, zero, &B(j,j), 1 );
138 for (OrdinalType j=0; j<B_nrowcols; ++j)
139 for (OrdinalType i=0; i<=j; ++i)
140 blas.
GEMV( transw, 1, A_nrowcols, one, &AW(i,0), AW.
stride(), &W(j,0), W.
stride(), zero, &B(i,j), 1 );
143 for (OrdinalType j=0; j<B_nrowcols; ++j)
144 for (OrdinalType i=j; i<B_nrowcols; ++i)
145 blas.
GEMV( transw, 1, A_nrowcols, one, &AW(i,0), AW.
stride(), &W(j,0), W.
stride(), zero, &B(i,j), 1 );
161 template<
typename OrdinalType,
typename ScalarType>
177 template<
typename OrdinalType,
typename ScalarType>
179 const OrdinalType col,
194 template <
typename OrdinalType,
typename ScalarType>
201 MPI_Initialized(&mpiStarted);
210 const OrdinalType procRank = rank(*comm);
237 template<
typename OrdinalType,
typename ScalarType>
240 const OrdinalType kl,
const OrdinalType ku,
241 const bool factorFormat)
243 OrdinalType m = A->numRows();
244 OrdinalType n = A->numCols();
248 "SerialBandDenseSolver<T>::generalToBanded: A is an empty SerialDenseMatrix<T>!");
250 "SerialBandDenseSolver<T>::generalToBanded: The lower bandwidth kl is invalid!");
252 "SerialBandDenseSolver<T>::generalToBanded: The upper bandwidth ku is invalid!");
254 OrdinalType extraBands = (factorFormat ? kl : 0);
258 for (OrdinalType j = 0; j < n; j++) {
259 for (OrdinalType i=TEUCHOS_MAX(0,j-ku); i<=TEUCHOS_MIN(m-1,j+kl); i++) {
260 (*AB)(i,j) = (*A)(i,j);
273 template<
typename OrdinalType,
typename ScalarType>
278 OrdinalType m = AB->numRows();
279 OrdinalType n = AB->numCols();
280 OrdinalType kl = AB->lowerBandwidth();
281 OrdinalType ku = AB->upperBandwidth();
285 "SerialBandDenseSolver<T>::bandedToGeneral: AB is an empty SerialBandDenseMatrix<T>!");
288 for (OrdinalType j = 0; j < n; j++) {
289 for (OrdinalType i=TEUCHOS_MAX(0,j-ku); i<=TEUCHOS_MIN(m-1,j+kl); i++) {
290 (*A)(i,j) = (*AB)(i,j);
bool setCol(const SerialDenseVector< OrdinalType, ScalarType > &v, const OrdinalType col, SerialDenseMatrix< OrdinalType, ScalarType > &A)
A templated, non-member, helper function for setting a SerialDenseMatrix column using a SerialDenseVe...
Templated serial dense matrix class.
ScalarType * values() const
Data array access method.
void randomSyncedMatrix(Teuchos::SerialDenseMatrix< OrdinalType, ScalarType > &A)
A templated, non-member, helper function for generating a random SerialDenseMatrix that is synchroniz...
int shapeUninitialized(OrdinalType numRows, OrdinalType numCols)
Same as shape() except leaves uninitialized.
void GEMV(ETransp trans, const OrdinalType &m, const OrdinalType &n, const alpha_type alpha, const A_type *A, const OrdinalType &lda, const x_type *x, const OrdinalType &incx, const beta_type beta, ScalarType *y, const OrdinalType &incy) const
Performs the matrix-vector operation: y <- alpha*A*x+beta*y or y <- alpha*A'*x+beta*y where A is a ge...
void symMatTripleProduct(ETransp transw, const ScalarType alpha, const SerialSymDenseMatrix< OrdinalType, ScalarType > &A, const SerialDenseMatrix< OrdinalType, ScalarType > &W, SerialSymDenseMatrix< OrdinalType, ScalarType > &B)
A templated, non-member, helper function for computing the matrix triple-product: B = alpha*W^T*A*W o...
int multiply(ETransp transa, ETransp transb, ScalarType alpha, const SerialDenseMatrix< OrdinalType, ScalarType > &A, const SerialDenseMatrix< OrdinalType, ScalarType > &B, ScalarType beta)
Multiply A * B and add them to this; this = beta * this + alpha*A*B.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
SerialDenseVector< OrdinalType, ScalarType > getCol(DataAccess CV, SerialDenseMatrix< OrdinalType, ScalarType > &A, const OrdinalType col)
A templated, non-member, helper function for viewing or copying a column of a SerialDenseMatrix as a ...
Teuchos header file which uses auto-configuration information to include necessary C++ headers...
This class creates and provides basic support for symmetric, positive-definite dense matrices of temp...
Concrete serial communicator subclass.
static Teuchos::RCP< const Comm< OrdinalType > > getComm()
Return the default global communicator.
This class creates and provides basic support for dense vectors of templated type as a specialization...
This structure defines some basic traits for a scalar field type.
Templated serial dense matrix class.
OrdinalType numRows() const
Returns the row dimension of this matrix.
Teuchos::RCP< SerialDenseMatrix< OrdinalType, ScalarType > > bandedToGeneral(const RCP< SerialBandDenseMatrix< OrdinalType, ScalarType > > &AB)
A templated, non-member, helper function for converting a SerialBandDenseMatrix to a SerialDenseMatri...
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Deprecated.
bool upper() const
Returns true if upper triangular part of this matrix has and will be used.
OrdinalType numRows() const
Returns the row dimension of this matrix.
int putScalar(const ScalarType value=Teuchos::ScalarTraits< ScalarType >::zero(), bool fullMatrix=false)
Set all values in the matrix to a constant value.
This class creates and provides basic support for banded dense matrices of templated type...
Teuchos::RCP< SerialBandDenseMatrix< OrdinalType, ScalarType > > generalToBanded(const RCP< SerialDenseMatrix< OrdinalType, ScalarType > > &A, const OrdinalType kl, const OrdinalType ku, const bool factorFormat)
A templated, non-member, helper function for converting a SerialDenseMatrix to a SerialBandDenseMatri...
Templated serial, dense, symmetric matrix class.
int random()
Set all values in the matrix to be random numbers.
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos, as well as a number of utility routines.
Templated serial dense vector class.
Defines basic traits for the scalar field type.
static T zero()
Returns representation of zero for this scalar type.
OrdinalType stride() const
Returns the stride between the columns of this matrix in memory.
Smart reference counting pointer class for automatic garbage collection.
OrdinalType numCols() const
Returns the column dimension of this matrix.
OrdinalType length() const
Returns the length of this vector.
SerialDenseMatrix< OrdinalType, ScalarType > & assign(const SerialDenseMatrix< OrdinalType, ScalarType > &Source)
Copies values from one matrix to another.
static T one()
Returns representation of one for this scalar type.
Teuchos::DataAccess Mode enumerable type.
This class creates and provides basic support for dense rectangular matrix of templated type...