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*(double a, const GslMatrix &mat)
 
GslMatrix operator-(const GslMatrix &m1, const GslMatrix &m2)
 
GslMatrix operator+(const GslMatrix &m1, const GslMatrix &m2)
 
GslMatrix rightDiagScaling(const GslMatrix &mat, const GslVector &vec)
 
GslMatrix matrixProduct(const GslVector &v1, const GslVector &v2)
 
std::ostream & operator<<(std::ostream &os, const BaseEnvironment &obj)
 
GslMatrix leftDiagScaling(const GslVector &vec, const GslMatrix &mat)