00001 00005 class MatSchurUDC(Type) : public HandleId 00006 00007 { 00008 public: 00009 00010 MatSchurUDC(Type) () {} 00011 00012 virtual ~MatSchurUDC(Type) () {} 00013 00014 virtual void prod 00015 (const Vector(Type)& xb, 00016 Vector(Type)& yb, 00017 TransposeMode tpmode = NOT_TRANSPOSED, 00018 bool add_to_yb = false 00019 ) = 0; 00020 }; 00021 00022 00055 class MatSchur(Type) : public Matrix(Type) 00056 00057 { 00058 protected: 00059 00060 int mat_size; 00061 MatSchurUDC(Type) *udc; 00062 00063 public: 00064 00065 00066 MatSchur(Type) (); 00067 MatSchur(Type) (int n); 00068 virtual ~MatSchur(Type) () {} 00069 00070 virtual void attachUserCode (MatSchurUDC(Type)& user_code); 00071 00072 00073 virtual int getNoRows () const; 00074 virtual int getNoColumns () const; 00075 virtual int getNoNonzeroes () const; 00076 virtual void size (int& m, int& n) const; 00077 virtual real getStorage() const; 00078 00079 00080 virtual bool makeItSimilar (Handle(Matrix(Type))& M) const; 00081 virtual bool redim (const Matrix(prm_Type)& pm); 00082 00083 00084 virtual bool redim (const VecSimple(int)& ivec, 00085 const VecSimple(int)& jvec, 00086 int new_nrows, 00087 int new_ncolumns); 00088 virtual void getIndexSet (VecSimple(int)& ivec, 00089 VecSimple(int)& jvec) const; 00090 virtual bool validIndexSet (const VecSimple(int)& ivec, 00091 const VecSimple(int)& jvec, 00092 const int new_nrows, 00093 const int new_ncolumns); 00094 00095 virtual Type& elm (int i, int j); 00096 virtual void fill (const Matrix(Type)& X); 00097 virtual void fill (Type a); 00098 00099 00100 virtual void add 00101 (Matrix(Type)& bm, Matrix(Type)& cm); 00102 00103 virtual void add 00104 (Matrix(Type)& bm, char s, Matrix(Type)& cm); 00105 00106 virtual void add 00107 (Matrix(Type)& bm, Type b, Matrix(Type)& cm); 00108 00109 virtual void add 00110 (Type a, Matrix(Type)& bm, Type b, Matrix(Type)& cm); 00111 00112 00113 virtual void prod 00114 ( 00115 const Vector(Type)& xb, 00116 Vector(Type)& yb, 00117 TransposeMode tpmode = NOT_TRANSPOSED, 00118 bool add_to_yb = false 00119 ) const; 00120 00121 00122 virtual bool factorize (const FactStrategy& fstrategy); 00123 virtual void forwBack (Vector(Type)& bb, Vector(Type)& xb); 00124 00125 00126 00127 virtual void SSOR1it (Vector(Type)& xnew, const Vector(Type)& xold, 00128 const Vector(Type)& b, real omega, 00129 TransposeMode tpmode = NOT_TRANSPOSED) const; 00130 virtual void SSORsolve (Vector(Type)& y, const Vector(Type)& c, 00131 real omega, 00132 TransposeMode tpmode = NOT_TRANSPOSED) const; 00133 00134 virtual void SOR1it (Vector(Type)& xnew, const Vector(Type)& xold, 00135 const Vector(Type)& b, real omega, 00136 TransposeMode tpmode = NOT_TRANSPOSED) const; 00137 virtual void SORsolve (Vector(Type)& y, const Vector(Type)& c, 00138 real omega, 00139 TransposeMode tpmode = NOT_TRANSPOSED) const; 00140 00141 virtual void Jacobi1it (Vector(Type)& xnew, const Vector(Type)& xold, 00142 const Vector(Type)& b, 00143 TransposeMode tpmode = NOT_TRANSPOSED) const; 00144 virtual void Jacobisolve (Vector(Type)& y, const Vector(Type)& c, 00145 TransposeMode tpmode = NOT_TRANSPOSED) const; 00146 00147 00148 virtual void print (Os os, const char* header = NULL, 00149 int nentries_per_line = 3) const; 00150 virtual void printAscii (Os os, const char* header = NULL) const; 00151 00152 virtual void scan (Is is); 00153 00154 CLASS_INFO 00155 VIRTUAL_CAST(MatSchur(Type)); 00156 }; 00157 00158