NGSolve  4.9
linalg/special_matrix.hpp
00001 #ifndef FILE_NGS_SPECIALMATRIX
00002 #define FILE_NGS_SPECIALMATRIX
00003 
00004 /* ************************************************************************/
00005 /* File:   special_matrix.hpp                                             */
00006 /* Author: Joachim Schoeberl                                              */
00007 /* Date:   14 Mar. 02                                                     */
00008 /* ************************************************************************/
00009 
00010 namespace ngla
00011 {
00012 
00013   template <class TVR, class TVC>
00014   class Real2ComplexMatrix : public BaseMatrix
00015   {
00016     const BaseMatrix * realmatrix;
00017     VVector<TVR> hx, hy;
00018   public:
00019     Real2ComplexMatrix (const BaseMatrix * arealmatrix = 0);
00020     void SetMatrix (const BaseMatrix * arealmatrix);
00021     const BaseMatrix & GetMatrix () const { return *realmatrix; }
00022     virtual void MultAdd (double s, const BaseVector & x, BaseVector & y) const;
00023     virtual void MultAdd (Complex s, const BaseVector & x, BaseVector & y) const;
00024   };
00025 
00026 
00027 
00028 
00030   // added 08/19/2003
00031   template <class TVR>
00032   class Sym2NonSymMatrix : public BaseMatrix
00033   {
00034     const BaseMatrix * base;
00035     VVector<TVR> hx, hy;
00036   public:
00037     Sym2NonSymMatrix (const BaseMatrix * abasematrix = 0);
00038     void SetMatrix (const BaseMatrix * abasematrix);
00039     const BaseMatrix & GetMatrix () const { return *base; }
00040     virtual void MultAdd (double s, const BaseVector & x, BaseVector & y) const;
00041     //  virtual void MultAdd (Complex s, const BaseVector & x, BaseVector & y) const;
00042   };
00043 
00044 
00045 
00047   // added 09/02/2003
00048   template <class TVSMALL, class TVBIG>
00049   class Small2BigNonSymMatrix : public BaseMatrix
00050   {
00051     const BaseMatrix * base;
00052     VVector<TVSMALL> hx1, hx2, hy1, hy2;
00053   public:
00054     Small2BigNonSymMatrix (const BaseMatrix * abasematrix = 0);
00055     void SetMatrix (const BaseMatrix * abasematrix);
00056     const BaseMatrix & GetMatrix () const { return *base; }
00057     virtual void MultAdd (double s, const BaseVector & x, BaseVector & y) const;
00058     //  virtual void MultAdd (Complex s, const BaseVector & x, BaseVector & y) const;
00059     virtual void MultTransAdd (double s, const BaseVector & x, BaseVector & y) const;
00060   };
00061 
00062 
00063 }
00064 
00065 #endif