25 #ifndef UQ_TEUCHOS_MATRIX_H
26 #define UQ_TEUCHOS_MATRIX_H
28 #ifdef QUESO_HAS_TRILINOS
29 #include <queso/TeuchosVector.h>
30 #include <Teuchos_SerialDenseVector.hpp>
31 #include <Teuchos_SerialDenseMatrix.hpp>
32 #include <Teuchos_LAPACK.hpp>
35 #include <queso/Matrix.h>
37 #ifdef QUESO_HAS_TRILINOS
53 class TeuchosMatrix :
public Matrix
64 TeuchosMatrix(
const BaseEnvironment& env,
66 unsigned int numCols);
69 TeuchosMatrix(
const BaseEnvironment& env,
74 TeuchosMatrix(
const TeuchosVector& v,
79 TeuchosMatrix(
const TeuchosVector& v);
82 TeuchosMatrix(
const TeuchosMatrix& B);
90 TeuchosMatrix& operator= (
const TeuchosMatrix& rhs);
94 TeuchosMatrix& operator*=(
double a);
97 TeuchosMatrix& operator/=(
double a);
100 TeuchosMatrix& operator+=(
const TeuchosMatrix& rhs);
102 TeuchosMatrix& operator-=(
const TeuchosMatrix& rhs);
107 double& operator()(
unsigned int i,
unsigned int j);
111 const double& operator()(
unsigned int i,
unsigned int j)
const;
116 unsigned int numRowsLocal ()
const;
120 unsigned int numRowsGlobal ()
const;
123 unsigned int numCols ()
const;
136 unsigned int rank (
double absoluteZeroThreshold,
double relativeZeroThreshold)
const;
139 TeuchosMatrix transpose ()
const;
142 TeuchosMatrix inverse ()
const;
145 double determinant ()
const;
148 double lnDeterminant ()
const;
153 double normFrob ()
const;
157 double normMax ()
const;
167 int svd (TeuchosMatrix& matU, TeuchosVector& vecS, TeuchosMatrix& matVt)
const;
171 const TeuchosMatrix& svdMatU ()
const;
175 const TeuchosMatrix& svdMatV ()
const;
182 int svdSolve (
const TeuchosVector& rhsVec, TeuchosVector& solVec)
const;
188 int svdSolve (
const TeuchosMatrix& rhsMat, TeuchosMatrix& solMat)
const;
193 TeuchosVector multiply (
const TeuchosVector& x)
const;
198 void invertMultiply (
const TeuchosVector& b, TeuchosVector& x)
const;
202 TeuchosVector invertMultiply (
const TeuchosVector& b)
const;
206 void invertMultiply (
const TeuchosMatrix& B, TeuchosMatrix& X)
const;
210 TeuchosMatrix invertMultiply (
const TeuchosMatrix& B)
const;
214 void invertMultiplyForceLU (
const TeuchosVector& b, TeuchosVector& x)
const;
219 TeuchosVector invertMultiplyForceLU (
const TeuchosVector& b)
const;
222 void eigen (TeuchosVector& eigenValues, TeuchosMatrix* eigenVectors)
const;
225 void largestEigen (
double& eigenValue, TeuchosVector& eigenVector)
const;
228 void smallestEigen (
double& eigenValue, TeuchosVector& eigenVector)
const;
236 void cwSet (
double value);
239 void cwSet (
unsigned int rowId,
unsigned int colId,
const TeuchosMatrix& mat);
243 void getColumn (
const unsigned int column_num, TeuchosVector& column)
const;
246 TeuchosVector getColumn (
const unsigned int column_num)
const;
249 void setColumn (
const unsigned int column_num,
const TeuchosVector& column);
252 void getRow (
const unsigned int row_num, TeuchosVector& row)
const;
255 TeuchosVector getRow (
const unsigned int row_num)
const;
258 void setRow (
const unsigned int row_num,
const TeuchosVector& row);
263 void zeroLower (
bool includeDiagonal =
false);
268 void zeroUpper (
bool includeDiagonal =
false);
272 void filterSmallValues (
double thresholdValue);
276 void filterLargeValues (
double thresholdValue);
279 void fillWithTranspose (
const TeuchosMatrix& mat);
282 void fillWithBlocksDiagonally (
const std::vector<const TeuchosMatrix* >& matrices);
285 void fillWithBlocksDiagonally (
const std::vector< TeuchosMatrix* >& matrices);
288 void fillWithBlocksHorizontally(
const std::vector<const TeuchosMatrix* >& matrices);
291 void fillWithBlocksHorizontally(
const std::vector< TeuchosMatrix* >& matrices);
294 void fillWithBlocksVertically (
const std::vector<const TeuchosMatrix* >& matrices);
297 void fillWithBlocksVertically (
const std::vector< TeuchosMatrix* >& matrices);
300 void fillWithTensorProduct (
const TeuchosMatrix& mat1,
const TeuchosMatrix& mat2);
303 void fillWithTensorProduct (
const TeuchosMatrix& mat1,
const TeuchosVector& vec2);
310 void mpiSum (
const MpiComm& comm, TeuchosMatrix& M_global)
const;
312 void matlabLinearInterpExtrap (
const TeuchosVector& x1Vec,
const TeuchosMatrix& y1Mat,
const TeuchosVector& x2Vec);
317 void print (std::ostream& os)
const;
321 void subReadContents (
const std::string& fileName,
322 const std::string& fileType,
323 const std::set<unsigned int>& allowedSubEnvIds);
326 void subWriteContents (
const std::string& varNamePrefix,
327 const std::string& fileName,
328 const std::string& fileType,
329 const std::set<unsigned int>& allowedSubEnvIds)
const;
335 void copy (
const TeuchosMatrix& src);
341 void multiply (
const TeuchosVector& x, TeuchosVector& y)
const;
350 int internalSvd ()
const;
353 Teuchos::SerialDenseMatrix<int,double> m_mat;
356 mutable Teuchos::SerialDenseMatrix<int,double> m_LU;
359 mutable TeuchosMatrix* m_inverse;
362 mutable Map* m_svdColMap;
365 mutable TeuchosMatrix* m_svdUmat;
368 mutable TeuchosVector* m_svdSvec;
371 mutable TeuchosMatrix* m_svdVmat;
374 mutable TeuchosMatrix* m_svdVTmat;
377 mutable double m_determinant;
380 mutable double m_lnDeterminant;
382 mutable TeuchosMatrix* m_permutation;
385 mutable int* v_pivoting;
388 mutable int m_signum;
391 mutable bool m_isSingular;
394 TeuchosMatrix
operator* (
double a,
const TeuchosMatrix& mat);
395 TeuchosVector
operator* (
const TeuchosMatrix& mat,
const TeuchosVector& vec);
396 TeuchosMatrix
operator* (
const TeuchosMatrix& m1,
const TeuchosMatrix& m2 );
397 TeuchosMatrix
operator+ (
const TeuchosMatrix& m1,
const TeuchosMatrix& m2 );
398 TeuchosMatrix
operator- (
const TeuchosMatrix& m1,
const TeuchosMatrix& m2 );
399 TeuchosMatrix
matrixProduct (
const TeuchosVector& v1,
const TeuchosVector& v2 );
400 TeuchosMatrix
leftDiagScaling (
const TeuchosVector& vec,
const TeuchosMatrix& mat);
401 TeuchosMatrix
rightDiagScaling(
const TeuchosMatrix& mat,
const TeuchosVector& vec);
402 std::ostream&
operator<< (std::ostream& os,
const TeuchosMatrix& obj);
406 #endif // ifdef QUESO_HAS_TRILINOS
408 #endif // UQ_TEUCHOS_MATRIX_H
GslMatrix operator+(const GslMatrix &m1, const GslMatrix &m2)
GslMatrix operator-(const GslMatrix &m1, const GslMatrix &m2)
std::ostream & operator<<(std::ostream &os, const BaseEnvironment &obj)
GslMatrix rightDiagScaling(const GslMatrix &mat, const GslVector &vec)
GslMatrix operator*(double a, const GslMatrix &mat)
GslMatrix matrixProduct(const GslVector &v1, const GslVector &v2)
GslMatrix leftDiagScaling(const GslVector &vec, const GslMatrix &mat)