/* $Id: sysmatsp.h,v 1.1.1.1 1996/10/02 10:35:54 roitzsch Exp $ */ #ifndef SYSMATSP_H #define SYSMATSP_H #include "sysmat.h" #include "sysmatma28.h" class ConnectionPattern; class DirichletBCs; //------------------------------------------------------------------------- class SparseMatrix : public SystemMatrix, public MA28Matrix { public: int dimension; Bool decomposed, ILUDecomposed; Vector D, *L, *U; // sparse matrix vectors Vector col, end; Vector dirichlet; Vector *symU; // used in symmetric expansion Vector symCol, symEnd; SparseMatrix (ConnectionPattern& cPattern, symmetryType symmetry, int spaceDim); SparseMatrix (int spaceDim, SystemMatrix* A, SystemMatrix* B=0, Num lambda=0.0); virtual ~SparseMatrix(); virtual int Dim() const { return dimension; } virtual int SpaceDim() const { return spaceDim; } virtual void removeLU(); virtual void reset(); virtual int memSpace(int print=0) const; virtual Num& operator() (int i, int k); virtual Num& Diag(int i) { return D[i]; } virtual Num Diag(int i) const { return D[i]; } virtual void Mult (Vector& lhs, Vector& rhs); virtual void ATMult(Vector& lhs, Vector& rhs); virtual void DiagMult(Vector& lhs, Vector& rhs, Real omega=1.0); virtual void DiagDiv (Vector& lhs, Vector& rhs, Real omega=1.0); virtual void LMult(Vector& lhs, Vector& rhs); virtual void UMult(Vector& lhs, Vector& rhs); virtual void F (Vector& lhs, Vector& rhs, Real omega=1.0); virtual void FT (Vector& lhs, Vector& rhs, Real omega=1.0); virtual void Fm1(Vector& lhs, Vector& rhs, Real omega=1.0); virtual void FmT(Vector& lhs, Vector& rhs, Real omega=1.0); virtual Real omegaOpt(int mode) const; virtual void smoothNode(int no, Vector& e, const Vector& r); virtual Num MultRow(int row, const Vector& e); virtual void symmetricExpansion(); virtual void removeSymmetricExpansion(); virtual void setDirichletBCs (DirichletBCs& dirichletBCs, Vector& b, Vector& bS, Num& Fct0, Num& E0); virtual void resetDirichletEntries(Vector& r) const; virtual SparseMatrix* castToSparseMatrix() { return this; } virtual void print() const; virtual void printMatLabFormat() const; protected: virtual void allocate(ConnectionPattern& cPattern); void setSymDirichletBCs (DirichletBCs& dirichletBCs, Vector& b, Vector& bSave, Num& Fct0, Num& E0); void setASymDirichletBCs(DirichletBCs& dirichletBCs, Vector& b, Vector& bSave, Num& Fct0, Num& E0); // -- routines for complete/incomplete factorization: public: virtual Bool DirectSolution() const { return decomposed; } virtual void Decompose(Bool removeOriginal=True); virtual void FBSubst(Vector& lhs, Vector& rhs); virtual void ILUDecompose(Real dropTol); virtual void ILUFBSubst(Vector& lhs, Vector& rhs); protected: virtual void fillMA28Vectors(); virtual void countEntries(int* dim, int* nEntries); friend class LinSystem; }; #endif