TAPs 0.7.7.3
TAPsSparseSymmetricMatrix_Matrix3x3.hpp
Go to the documentation of this file.
00001 /******************************************************************************
00002 TAPsSparseSymmetricMatrix_Matrix3x3.hpp
00003 ******************************************************************************/
00007 /******************************************************************************
00008 SUKITTI PUNAK   (12/30/2009)
00009 UPDATE          (04/10/2010)
00010 ******************************************************************************/
00011 #ifndef TAPs_SPARSE_SYMMETRIC_MATRIX_MATRIX3X3_HPP
00012 #define TAPs_SPARSE_SYMMETRIC_MATRIX_MATRIX3X3_HPP
00013 
00014 #include "TAPsSparseVector_Matrix3x3.hpp"
00015 
00016 BEGIN_NAMESPACE_TAPs
00017 //=============================================================================
00018 template <typename T>
00019 class SparseSymmetricMatrix_Matrix3x3 {
00020 //=============================================================================
00021 public:
00022     // Member Functions -------------------------------------------------------
00024     friend std::ostream & operator<< ( std::ostream &output, SparseSymmetricMatrix_Matrix3x3<T> const &obj )
00025     {
00026         output << obj.StrInfo();
00027         return output;
00028     }
00029     //-------------------------------------------------------------------------
00031     SparseSymmetricMatrix_Matrix3x3 ( unsigned int numOfRows = 0 );
00033     SparseSymmetricMatrix_Matrix3x3 ( SparseSymmetricMatrix_Matrix3x3<T> const &orig );
00035     virtual ~SparseSymmetricMatrix_Matrix3x3 ();
00036     //-------------------------------------------------------------------------
00038     virtual std::string StrInfo () const;
00039     //-------------------------------------------------------------------------
00040     // Operators
00041 
00043     inline SparseSymmetricMatrix_Matrix3x3<T> & operator= ( SparseSymmetricMatrix_Matrix3x3<T> const &orig );
00044 
00045     //-------------------------------------------------------------------------
00046     // Operations
00047 
00049     inline void MulWith (
00050         std::vector< Vector3<T> > const &I, 
00051         std::vector< Vector3<T> > &O        
00052     ) const;
00053 
00057     inline void MulWith_wSkippedElements (
00058         std::vector< Vector3<T> > const &I, 
00059         std::vector< Vector3<T> > &O,       
00060         std::vector< bool > const &Skip     
00061     ) const;
00062 
00065     inline void ChangeNumOfRows ( unsigned int numOfRows );
00066 
00070     inline void DiagonalizeRowCol ( unsigned int ii, T diagonalValue = 1 );
00071 
00076     inline void DiagonalizeRowsCols ( 
00077         std::vector< bool > const & ii, 
00078         T diagonalValue = 1             
00079     );
00080 
00082     inline void DiagonalizeRowsCols ( 
00083         std::vector< unsigned int > const & ii, 
00084         T diagonalValue = 1                     
00085     );
00086 
00088     inline unsigned int GetNumOfRows () const   { return m_Rows.size(); }
00089 
00091     void SetDirectAccessors ();
00092 
00095     inline SparseVector_Matrix3x3<T> * const DirectAccess ( unsigned int row );
00096 
00105     static void MPCGSolver ( 
00106         SparseSymmetricMatrix_Matrix3x3<T> const &A,    
00107         std::vector< Vector3<T> > const &x,     
00108         std::vector< Vector3<T> > const &b,     
00109         std::vector< Vector3<T> > &x_out,       
00110         std::vector< Vector3<T> > const &ft,    
00111         std::vector< Vector3<T> > const &P,     
00112         int iterationLimit = 100,               
00113         T errorThreshold = 1E-10                
00114     );
00115 
00124     static void MPCGSolverSpecificForFEM (
00125         std::vector< bool > const &fixedNodes,  
00126         SparseSymmetricMatrix_Matrix3x3<T> const &A,    
00127         std::vector< Vector3<T> > const &x,     
00128         std::vector< Vector3<T> > const &b,     
00129         std::vector< Vector3<T> > &x_out,       
00130         std::vector< Vector3<T> > const &ft,    
00131         std::vector< Vector3<T> > const &P,     
00132         int iterationLimit = 100,               
00133         T errorThreshold = 1E-10                
00134     );
00135     //-------------------------------------------------------------------------
00136 
00137     // Data Members -----------------------------------------------------------
00138 //=============================================================================
00139 protected:
00140     // Member Functions -------------------------------------------------------
00141 
00142     // Data Members -----------------------------------------------------------
00143     std::list< SparseVector_Matrix3x3<T> >      m_Rows; 
00144     std::vector< SparseVector_Matrix3x3<T>* >   m_DirectAccessors;  
00145 //=============================================================================
00146 private:
00147     // Member Functions -------------------------------------------------------
00148 
00149     static inline std::string DEBUG_ToStr ( std::vector< Vector3<T> > const &V )
00150     {
00151         std::stringstream ss;
00152         ss << "Dense Vector of size "<<V.size()<<":\n";
00153         for ( unsigned int i = 0; i < V.size(); ++i ) {
00154             ss << V[i] << "\n";
00155         }
00156         return ss.str();
00157     }
00158 
00159     static inline std::string DEBUG_ToStr ( std::vector< Matrix3x3<T> > const &V )
00160     {
00161         std::stringstream ss;
00162         ss << "Dense Vector of size "<<V.size()<<":\n";
00163         for ( unsigned int i = 0; i < V.size(); ++i ) {
00164             ss << V[i] << "\n";
00165         }
00166         return ss.str();
00167     }
00168     // Data Members -----------------------------------------------------------
00169 //=============================================================================
00170 
00171 #if defined(__gl_h_) || defined(__GL_H__)
00172 public:
00173     //virtual void Draw ();
00174 #endif
00175 
00176 //=============================================================================
00177 }; // END CLASS SparseSymmetricMatrix_Matrix3x3
00178 //=============================================================================
00179 END_NAMESPACE_TAPs
00180 //-----------------------------------------------------------------------------
00182 #include "TAPsSparseSymmetricMatrix_Matrix3x3.cpp"
00183 
00185 // Include definition if TAPs_USE_EXPORT is not defined
00186 //#if !defined( TAPs_USE_EXPORT )
00187 //  #include "TAPsSparseSymmetricMatrix_Matrix3x3.cpp"
00188 //#endif
00189 //-----------------------------------------------------------------------------
00190 #endif
00191 //34567890123456789012345678901234567890123456789012345678901234567890123456789
00192 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines