42#ifndef _TEUCHOS_SERIALBANDDENSEMATRIX_HPP_
43#define _TEUCHOS_SERIALBANDDENSEMATRIX_HPP_
132template<
typename OrdinalType,
typename ScalarType>
293 ScalarType&
operator () (OrdinalType rowIndex, OrdinalType colIndex);
303 const ScalarType&
operator () (OrdinalType rowIndex, OrdinalType colIndex)
const;
357 int scale (
const ScalarType alpha );
426 virtual std::ostream&
print(std::ostream& os)
const;
431 void copyMat(ScalarType* inputMatrix, OrdinalType strideInput,
432 OrdinalType
numRows, OrdinalType
numCols, ScalarType* outputMatrix,
435 void checkIndex( OrdinalType rowIndex, OrdinalType colIndex = 0 )
const;
450template<
typename OrdinalType,
typename ScalarType>
453 BLAS<OrdinalType,ScalarType>(),
463template<
typename OrdinalType,
typename ScalarType>
466 OrdinalType numCols_in,
471 BLAS<OrdinalType,ScalarType>(),
486template<
typename OrdinalType,
typename ScalarType>
489 ScalarType* values_in,
490 OrdinalType stride_in,
491 OrdinalType numRows_in,
492 OrdinalType numCols_in,
496 BLAS<OrdinalType,ScalarType>(),
513template<
typename OrdinalType,
typename ScalarType>
517 BLAS<OrdinalType,ScalarType>(),
543 for (OrdinalType j = 0; j <
numCols_; ++j) {
558 for (OrdinalType j=0; j<
numCols_; j++) {
567template<
typename OrdinalType,
typename ScalarType>
571 OrdinalType numRows_in,
572 OrdinalType numCols_in,
573 OrdinalType startCol)
575 BLAS<OrdinalType,ScalarType>(),
594template<
typename OrdinalType,
typename ScalarType>
604template<
typename OrdinalType,
typename ScalarType>
606 OrdinalType numRows_in, OrdinalType numCols_in, OrdinalType kl_in, OrdinalType ku_in
622template<
typename OrdinalType,
typename ScalarType>
624 OrdinalType numRows_in, OrdinalType numCols_in, OrdinalType kl_in, OrdinalType ku_in
639template<
typename OrdinalType,
typename ScalarType>
641 OrdinalType numRows_in, OrdinalType numCols_in, OrdinalType kl_in, OrdinalType ku_in
646 ScalarType* values_tmp =
new ScalarType[(kl_in+ku_in+1) * numCols_in];
648 for(OrdinalType k = 0; k < (kl_in+ku_in+1) * numCols_in; k++) {
649 values_tmp[k] = zero;
673template<
typename OrdinalType,
typename ScalarType>
678 for(OrdinalType j = 0; j <
numCols_; j++) {
687template<
typename OrdinalType,
typename ScalarType>
692 for(OrdinalType j = 0; j <
numCols_; j++) {
701template<
typename OrdinalType,
typename ScalarType>
735 values_ =
new ScalarType[newsize];
757 values_ =
new ScalarType[newsize];
768template<
typename OrdinalType,
typename ScalarType>
781template<
typename OrdinalType,
typename ScalarType>
794template<
typename OrdinalType,
typename ScalarType>
815template<
typename OrdinalType,
typename ScalarType>
818#ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK
824template<
typename OrdinalType,
typename ScalarType>
827#ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK
833template<
typename OrdinalType,
typename ScalarType>
836#ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK
842template<
typename OrdinalType,
typename ScalarType>
845#ifdef HAVE_TEUCHOS_ARRAY_BOUNDSCHECK
855template<
typename OrdinalType,
typename ScalarType>
879template<
typename OrdinalType,
typename ScalarType>
897template<
typename OrdinalType,
typename ScalarType>
918template<
typename OrdinalType,
typename ScalarType>
929 if((*
this)(i, j) != Operand(i, j)) {
939template<
typename OrdinalType,
typename ScalarType>
942 return !((*this) == Operand);
949template<
typename OrdinalType,
typename ScalarType>
952 this->
scale( alpha );
956template<
typename OrdinalType,
typename ScalarType>
966 *
ptr = alpha * (*ptr);
ptr++;
974template<
typename OrdinalType,
typename ScalarType>
996template<
typename OrdinalType,
typename ScalarType>
1001 os <<
"Values_copied : yes" << std::endl;
1003 os <<
"Values_copied : no" << std::endl;
1004 os <<
"Rows : " <<
numRows_ << std::endl;
1005 os <<
"Columns : " <<
numCols_ << std::endl;
1006 os <<
"Lower Bandwidth : " <<
kl_ << std::endl;
1007 os <<
"Upper Bandwidth : " <<
ku_ << std::endl;
1008 os <<
"LDA : " <<
stride_ << std::endl;
1010 os <<
"(matrix is empty, no values to display)" << std::endl;
1013 for(OrdinalType i = 0; i <
numRows_; i++) {
1015 os << (*this)(i,j) <<
" ";
1027template<
typename OrdinalType,
typename ScalarType>
1033 "SerialBandDenseMatrix<T>::checkIndex: "
1034 "Row index " << rowIndex <<
" out of range [0, "<<
numRows_ <<
")");
1036 "SerialBandDenseMatrix<T>::checkIndex: "
1037 "Col index " << colIndex <<
" out of range [0, "<<
numCols_ <<
")");
1041template<
typename OrdinalType,
typename ScalarType>
1051template<
typename OrdinalType,
typename ScalarType>
1053 ScalarType* inputMatrix, OrdinalType strideInput, OrdinalType numRows_in,
1054 OrdinalType numCols_in, ScalarType* outputMatrix, OrdinalType strideOutput, OrdinalType startCol, ScalarType alpha
1058 ScalarType* ptr1 = 0;
1059 ScalarType* ptr2 = 0;
1061 for(j = 0; j < numCols_in; j++) {
1062 ptr1 = outputMatrix + (j * strideOutput) +
TEUCHOS_MAX(0,
ku_-j);
1063 ptr2 = inputMatrix + (j + startCol) * strideInput +
TEUCHOS_MAX(0,
ku_-j);
1066 *ptr1++ += alpha*(*ptr2++);
1077template<
typename OrdinalType,
typename ScalarType>
1087template<
typename OrdinalType,
typename ScalarType>
1092 printer.
obj.print(out);
1097template<
typename OrdinalType,
typename ScalarType>
1098SerialBandDenseMatrixPrinter<OrdinalType,ScalarType>
Templated interface class to BLAS routines.
Object for storing data and providing functionality that is common to all computational classes.
Teuchos header file which uses auto-configuration information to include necessary C++ headers.
#define TEUCHOS_CHK_REF(a)
#define TEUCHOS_MIN(x, y)
#define TEUCHOS_MAX(x, y)
#define TEUCHOS_CHK_ERR(a)
Teuchos::DataAccess Mode enumerable type.
Reference-counted pointer class and non-member templated function implementations.
Defines basic traits for the scalar field type.
SerialBandDenseMatrix()
Default Constructor.
BLAS(void)
Default constructor.
void updateFlops(int addflops) const
Increment Flop count for this object.
CompObject()
Default constructor.
Ptr< T > ptr(T *p)
Create a pointer to an object from a raw pointer.
This class creates and provides basic support for banded dense matrices of templated type.
SerialBandDenseMatrix< OrdinalType, ScalarType > & operator+=(const SerialBandDenseMatrix< OrdinalType, ScalarType > &Source)
Add another matrix to this matrix.
virtual ~SerialBandDenseMatrix()
Destructor.
SerialBandDenseMatrix(DataAccess CV, const SerialBandDenseMatrix< OrdinalType, ScalarType > &Source, OrdinalType numRows, OrdinalType numCols, OrdinalType startCol=0)
Submatrix Copy Constructor.
int shapeUninitialized(OrdinalType numRows, OrdinalType numCols, OrdinalType kl, OrdinalType ku)
Same as shape() except leaves uninitialized.
SerialBandDenseMatrix()
Default Constructor.
int random()
Set all values in the matrix to be random numbers.
virtual std::ostream & print(std::ostream &os) const
Print method. Defines the behavior of the std::ostream << operator.
ScalarTraits< ScalarType >::magnitudeType normFrobenius() const
Returns the Frobenius-norm of the matrix.
ScalarType scalarType
Typedef for scalar type.
SerialBandDenseMatrix< OrdinalType, ScalarType > & operator=(const SerialBandDenseMatrix< OrdinalType, ScalarType > &Source)
Copies values from one matrix to another.
bool empty() const
Returns whether this matrix is empty.
OrdinalType ordinalType
Typedef for ordinal type.
int scale(const ScalarType alpha)
Scale this matrix by alpha; *this = alpha**this.
SerialBandDenseMatrix< OrdinalType, ScalarType > & operator-=(const SerialBandDenseMatrix< OrdinalType, ScalarType > &Source)
Subtract another matrix from this matrix.
ScalarType * operator[](OrdinalType colIndex)
Column access method (non-const).
int putScalar(const ScalarType value=Teuchos::ScalarTraits< ScalarType >::zero())
Set all values in the matrix to a constant value.
SerialBandDenseMatrix< OrdinalType, ScalarType > & operator*=(const ScalarType alpha)
Scale this matrix by alpha; *this = alpha**this.
void checkIndex(OrdinalType rowIndex, OrdinalType colIndex=0) const
OrdinalType lowerBandwidth() const
Returns the lower bandwidth of this matrix.
bool operator==(const SerialBandDenseMatrix< OrdinalType, ScalarType > &Operand) const
Equality of two matrices.
SerialBandDenseMatrix(OrdinalType numRows, OrdinalType numCols, OrdinalType kl, OrdinalType ku, bool zeroOut=true)
Shaped Constructor.
int reshape(OrdinalType numRows, OrdinalType numCols, OrdinalType kl, OrdinalType ku)
Reshaping method for changing the size of a SerialBandDenseMatrix, keeping the entries.
SerialBandDenseMatrix< OrdinalType, ScalarType > & assign(const SerialBandDenseMatrix< OrdinalType, ScalarType > &Source)
Copies values from one matrix to another.
SerialBandDenseMatrix(DataAccess CV, ScalarType *values, OrdinalType stride, OrdinalType numRows, OrdinalType numCols, OrdinalType kl, OrdinalType ku)
Shaped Constructor with Values.
bool operator!=(const SerialBandDenseMatrix< OrdinalType, ScalarType > &Operand) const
Inequality of two matrices.
ScalarType & operator()(OrdinalType rowIndex, OrdinalType colIndex)
Element access method (non-const).
int shape(OrdinalType numRows, OrdinalType numCols, OrdinalType kl, OrdinalType ku)
Shape method for changing the size of a SerialBandDenseMatrix, initializing entries to zero.
int scale(const SerialBandDenseMatrix< OrdinalType, ScalarType > &A)
Point-wise scale this matrix by A; i.e. *this(i,j) *= A(i,j).
OrdinalType upperBandwidth() const
Returns the upper bandwidth of this matrix.
ScalarTraits< ScalarType >::magnitudeType normInf() const
Returns the Infinity-norm of the matrix.
SerialBandDenseMatrix(const SerialBandDenseMatrix< OrdinalType, ScalarType > &Source, ETransp trans=Teuchos::NO_TRANS)
Copy Constructor.
ScalarTraits< ScalarType >::magnitudeType normOne() const
Returns the 1-norm of the matrix.
void copyMat(ScalarType *inputMatrix, OrdinalType strideInput, OrdinalType numRows, OrdinalType numCols, ScalarType *outputMatrix, OrdinalType strideOutput, OrdinalType startCol, ScalarType alpha=ScalarTraits< ScalarType >::zero())
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
std::ostream & operator<<(std::ostream &os, BigUInt< n > a)
SerialBandDenseMatrixPrinter< OrdinalType, ScalarType > printMat(const SerialBandDenseMatrix< OrdinalType, ScalarType > &obj)
Return SerialBandDenseMatrix ostream manipulator Use as:
static magnitudeType magnitude(T a)
Returns the magnitudeType of the scalar type a.
static T one()
Returns representation of one for this scalar type.
T magnitudeType
Mandatory typedef for result of magnitude.
static T zero()
Returns representation of zero for this scalar type.
static T conjugate(T a)
Returns the conjugate of the scalar type a.
static T random()
Returns a random number (between -one() and +one()) of this scalar type.
static T squareroot(T x)
Returns a number of magnitudeType that is the square root of this scalar type x.
static const bool isComplex
Determines if scalar type is std::complex.
Ostream manipulator for SerialBandDenseMatrix.
const SerialBandDenseMatrix< OrdinalType, ScalarType > & obj
SerialBandDenseMatrixPrinter(const SerialBandDenseMatrix< OrdinalType, ScalarType > &obj_in)