NGSolve
4.9
|
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