/* $Id: precond.h,v 1.2 1996/10/04 15:07:17 roitzsch Exp $ */ #ifndef PRECOND_H #define PRECOND_H #include "general.h" #include "kvector.h" class SystemMatrix; class DirichletBCs; class FamilyTree; //------------------------------------------------------------------------- // -- the base class preconditioner may be used as a dummy (no preconditioning) class Preconditioner { protected: SystemMatrix* AP; // the actual preconditioner DirichletBCs* dirichletBCs; int infoLinSystem, infoPrecond; int timeLinSystem, accTimeLinSystem; public: Preconditioner(); virtual ~Preconditioner(); virtual precondMode mode() = 0; virtual Bool diagonalOnly() { return False; } virtual void update(SystemMatrix* AP, FamilyTree* familyTree, DirichletBCs* dirichletBCs); virtual void initParameters() { } virtual void initialize(SystemMatrix* A, Vector& x, Vector& b) = 0; virtual void close (SystemMatrix* /*A*/, Vector& /*x*/, Vector& /*b*/) { } virtual void AMult (Vector& lhs, SystemMatrix* A, Vector& rhs); virtual void ATMult(Vector& lhs, SystemMatrix* A, Vector& rhs); virtual void invert(Vector& lhs, SystemMatrix* A, Vector& rhs) = 0; virtual int memSpace(int /*print*/=0) { return 0; } protected: void residual(Vector& newR, Vector& r, SystemMatrix& A, Vector& e); }; #endif