00001 00005 class PrecProcedure : public Precond 00006 00007 { 00008 protected: 00009 00010 00011 00012 00013 00014 Handle(LinEqVector) scratch2; 00015 00016 PrecProcedure (const Precond_prm& p); 00017 00018 public: 00019 00020 virtual ~PrecProcedure (); 00021 00022 virtual bool redim (const LinEqVector& x); 00023 00024 virtual void init (PrecBasis& Apb); 00025 00026 virtual bool ok () const { return true; } 00027 00028 virtual void apply ( 00029 const LinEqVector& /*c*/, 00030 LinEqVector& /*d*/, 00031 TransposeMode /*tpmode*/ = NOT_TRANSPOSED) { 00032 errorFP("PrecProcedure ::apply", 00033 "Can not apply, this is a nonactive base class"); 00034 } 00035 00036 virtual real getStorage () const { 00037 if (precproc.ok()) 00038 return precproc->getStorage(); 00039 else { 00040 warningFP("PrecProcedure ::getStorage","Storage unknown, returning 0"); 00041 return (0.0); 00042 } 00043 } 00044 00045 CLASS_INFO 00046 }; 00047 00048 00072 class PrecUserDefProc : public PrecProcedure 00073 00074 { 00075 public: 00076 00077 PrecUserDefProc (const Precond_prm& p); 00078 virtual ~PrecUserDefProc () {} 00079 00080 00081 00082 virtual bool ok () const { return precproc.ok(); } 00083 00084 virtual void apply 00085 ( 00086 const LinEqVector& c, 00087 LinEqVector& d, 00088 TransposeMode tpmode = NOT_TRANSPOSED 00089 ); 00090 00091 virtual int getWork (const PrecondWork work_tp = APPLY_PREC_WORK) const; 00092 00093 virtual String description () const; 00094 00095 CLASS_INFO 00096 }; 00097 00098