/* $Id: precondsg.h,v 1.1.1.1 1996/10/02 10:35:52 roitzsch Exp $ */ #ifndef PRECONDSG_H #define PRECONDSG_H #include "precond.h" class SparseMatrix; // -- Single-Grid preconditioners //------------------------------------------------------------------------- class DummyPreconditioner : public Preconditioner { public: virtual precondMode mode() { return singleGrid; } virtual void initialize(SystemMatrix* A, Vector& x, Vector& b); virtual void invert(Vector& lhs, SystemMatrix* A, Vector& rhs); }; //------------------------------------------------------------------------- class Jacobi : public Preconditioner { public: virtual precondMode mode() { return singleGrid; } virtual void initialize(SystemMatrix* A, Vector& x, Vector& b); virtual void invert(Vector& lhs, SystemMatrix* A, Vector& rhs); }; class SGS : public Preconditioner { public: virtual precondMode mode() { return singleGrid; } virtual void initialize(SystemMatrix* A, Vector& x, Vector& b); virtual void invert(Vector& lhs, SystemMatrix* A, Vector& rhs); }; class SSOR : public Preconditioner { protected: Real omega; public: virtual precondMode mode() { return singleGrid; } virtual void initialize(SystemMatrix* A, Vector& x, Vector& b); virtual void invert(Vector& lhs, SystemMatrix* A, Vector& rhs); virtual void initParameters(); }; class TrSSOR : public Preconditioner { protected: Real omega; Vector aux; public: TrSSOR(); virtual precondMode mode() { return singleGrid; } virtual void initParameters(); virtual void initialize(SystemMatrix* A, Vector& x, Vector& b); virtual void close (SystemMatrix* A, Vector& x, Vector& b); virtual void invert(Vector& lhs, SystemMatrix* A, Vector& rhs); virtual void AMult (Vector& s, SystemMatrix* A, Vector& r); virtual void ATMult(Vector& s, SystemMatrix* A, Vector& r); }; //------------------------------------------------------------------------- // -- the Hierarchical Basis Preconditioner: class HB : public Preconditioner { int maxLevel; SystemMatrix* A0; // Level 0 matrix SystemMatrix* AM1; // Matrix of previous level Vector* AHBDiag; // diagonal of hierarchical basis matrix FamilyTree* familyTree; public: HB(); ~HB(); virtual precondMode mode() { return multiGrid; } virtual void update (SystemMatrix* A, FamilyTree* familyTree, DirichletBCs* dirichletBCs); virtual void initialize(SystemMatrix* A, Vector& x, Vector& b); virtual void invert(Vector& lhs, SystemMatrix* A, Vector& rhs); }; //------------------------------------------------------------------------- /* class ILU : public Preconditioner { protected: SparseMatrix* AILU; // the factorized preconditioner Real weight; public: ILU(); ~ILU(); virtual precondMode mode() { return singleGrid; } virtual void update (SystemMatrix* A, FamilyTree* familyTree, DirichletBCs* dirichletBCs); virtual void initialize(SystemMatrix* A, Vector& x, Vector& b); virtual void invert(Vector& lhs, SystemMatrix* A, Vector& rhs); }; */ //------------------------------------------------------------------------- class ILU : public Preconditioner { protected: Real dropTol; public: ILU(); ~ILU(); virtual precondMode mode() { return singleGrid; } virtual void initialize(SystemMatrix* A, Vector& x, Vector& b); virtual void invert(Vector& lhs, SystemMatrix* A, Vector& rhs); }; #endif