10#ifndef _TEUCHOS_SERIALDENSEHELPERS_HPP_
11#define _TEUCHOS_SERIALDENSEHELPERS_HPP_
20#include "Teuchos_Assert.hpp"
26#include "Teuchos_CommHelpers.hpp"
27#include "Teuchos_DefaultComm.hpp"
28#include "Teuchos_DefaultSerialComm.hpp"
43template<
typename OrdinalType,
typename ScalarType>
49 OrdinalType A_nrowcols = A.
numRows();
50 OrdinalType B_nrowcols = (ETranspChar[transw]!=
'N') ? W.
numCols() : W.
numRows();
51 OrdinalType W_nrows = (ETranspChar[transw]!=
'N') ? W.
numRows() : W.
numCols();
52 OrdinalType W_ncols = (ETranspChar[transw]!=
'N') ? W.
numCols() : W.
numRows();
54 bool isBUpper = B.
upper();
58 "Teuchos::symMatTripleProduct<>() : "
59 "Num Rows/Cols B (" << B.
numRows() <<
") inconsistent with W ("<< B_nrowcols <<
")");
61 "Teuchos::symMatTripleProduct<>() : "
62 "Num Rows/Cols A (" << A_nrowcols <<
") inconsistent with W ("<< W_nrows <<
")");
80 if (ETranspChar[transw]!=
'N') {
89 for (OrdinalType j=0; j<B_nrowcols; ++j)
90 blas.
GEMV( transw, W_nrows, j+1, one, W.
values(), W.
stride(), AW[j], 1, zero, &B(0,j), 1 );
93 for (OrdinalType j=0; j<B_nrowcols; ++j)
94 blas.
GEMV( transw, W_nrows, B_nrowcols-j, one, W[j], W.
stride(), AW[j], 1, zero, &B(j,j), 1 );
106 for (OrdinalType j=0; j<B_nrowcols; ++j)
107 for (OrdinalType i=0; i<=j; ++i)
108 blas.
GEMV( transw, 1, A_nrowcols, one, &AW(i,0), AW.
stride(), &W(j,0), W.
stride(), zero, &B(i,j), 1 );
111 for (OrdinalType j=0; j<B_nrowcols; ++j)
112 for (OrdinalType i=j; i<B_nrowcols; ++i)
113 blas.
GEMV( transw, 1, A_nrowcols, one, &AW(i,0), AW.
stride(), &W(j,0), W.
stride(), zero, &B(i,j), 1 );
129template<
typename OrdinalType,
typename ScalarType>
145template<
typename OrdinalType,
typename ScalarType>
147 const OrdinalType col,
162template <
typename OrdinalType,
typename ScalarType>
169 MPI_Initialized(&mpiStarted);
178 const OrdinalType procRank =
rank(*comm);
205template<
typename OrdinalType,
typename ScalarType>
208 const OrdinalType kl,
const OrdinalType ku,
209 const bool factorFormat)
211 OrdinalType m = A->numRows();
212 OrdinalType n = A->numCols();
216 "SerialBandDenseSolver<T>::generalToBanded: A is an empty SerialDenseMatrix<T>!");
218 "SerialBandDenseSolver<T>::generalToBanded: The lower bandwidth kl is invalid!");
220 "SerialBandDenseSolver<T>::generalToBanded: The upper bandwidth ku is invalid!");
222 OrdinalType extraBands = (factorFormat ? kl : 0);
226 for (OrdinalType j = 0; j < n; j++) {
227 for (OrdinalType i=TEUCHOS_MAX(0,j-ku); i<=TEUCHOS_MIN(m-1,j+kl); i++) {
228 (*AB)(i,j) = (*A)(i,j);
241template<
typename OrdinalType,
typename ScalarType>
246 OrdinalType m = AB->numRows();
247 OrdinalType n = AB->numCols();
248 OrdinalType kl = AB->lowerBandwidth();
249 OrdinalType ku = AB->upperBandwidth();
253 "SerialBandDenseSolver<T>::bandedToGeneral: AB is an empty SerialBandDenseMatrix<T>!");
256 for (OrdinalType j = 0; j < n; j++) {
257 for (OrdinalType i=TEUCHOS_MAX(0,j-ku); i<=TEUCHOS_MIN(m-1,j+kl); i++) {
258 (*A)(i,j) = (*AB)(i,j);
Teuchos header file which uses auto-configuration information to include necessary C++ headers.
Teuchos::DataAccess Mode enumerable type.
Defines basic traits for the scalar field type.
Templated serial dense matrix class.
Templated serial dense matrix class.
Templated serial dense vector class.
Templated serial, dense, symmetric matrix class.
BLAS(void)
Default constructor.
int rank(const Comm< Ordinal > &comm)
Get the process rank.
void broadcast(const Comm< Ordinal > &comm, const int rootRank, const Ordinal count, Packet buffer[])
Broadcast array of objects that use value semantics.
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...
static Teuchos::RCP< const Comm< OrdinalType > > getComm()
Return the default global communicator.
Smart reference counting pointer class for automatic garbage collection.
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...
SerialBandDenseMatrix()
Default Constructor.
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...
Concrete serial communicator subclass.
This class creates and provides basic support for dense rectangular matrix of templated type.
int putScalar(const ScalarType value=Teuchos::ScalarTraits< ScalarType >::zero())
Set all values in the matrix to a constant value.
void randomSyncedMatrix(Teuchos::SerialDenseMatrix< OrdinalType, ScalarType > &A)
A templated, non-member, helper function for generating a random SerialDenseMatrix that is synchroniz...
SerialDenseMatrix< OrdinalType, ScalarType > & assign(const SerialDenseMatrix< OrdinalType, ScalarType > &Source)
Copies values from one matrix to another.
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...
OrdinalType stride() const
Returns the stride between the columns of this matrix in memory.
int random()
Set all values in the matrix to be random numbers.
OrdinalType numRows() const
Returns the row dimension of this matrix.
ScalarType * values() const
Data array access method.
int shapeUninitialized(OrdinalType numRows, OrdinalType numCols)
Same as shape() except leaves uninitialized.
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.
OrdinalType numCols() const
Returns the column dimension of this matrix.
SerialDenseMatrix()=default
Default Constructor.
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 ...
This class creates and provides basic support for dense vectors of templated type as a specialization...
OrdinalType length() const
Returns the length of this vector.
SerialSymDenseMatrix()=default
Default constructor; defines a zero size object.
int putScalar(const ScalarType value=Teuchos::ScalarTraits< ScalarType >::zero(), bool fullMatrix=false)
Set all values in the matrix to a constant value.
bool upper() const
Returns true if upper triangular part of this matrix has and will be used.
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...
OrdinalType numRows() const
Returns the row dimension of this matrix.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos,...
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Deprecated.
static T one()
Returns representation of one for this scalar type.
static T zero()
Returns representation of zero for this scalar type.