00001
00005 class PrecAlgebraic : public Precond
00006
00007 {
00008 protected:
00009
00010 Handle(LinEqMatrix) C;
00011
00012 PrecAlgebraic (const Precond_prm& p);
00013
00014
00015 virtual bool allocate (const LinEqMatrix& mat);
00016
00017 public:
00018
00019 virtual ~PrecAlgebraic () {}
00020
00021
00022
00023 virtual void init (PrecBasis& Apb);
00024
00025 virtual bool ok () const { return C.ok(); }
00026
00027 virtual void apply
00028 (const LinEqVector& ,
00029 LinEqVector& ,
00030 TransposeMode = NOT_TRANSPOSED) {
00031 errorFP("PrecAlebraic ::apply",
00032 "Can not apply, this is a nonactive base class");
00033 }
00034
00035 virtual real getStorage () const;
00036
00037 virtual void get (LinEqMatrix& precmat, String& precname) const;
00038 void get (Precond_prm& precprm_) const { Precond ::get (precprm_); }
00039
00040 CLASS_INFO
00041 };
00042
00043
00066 class PrecUserDefLU : public PrecAlgebraic
00067
00068 {
00069 public:
00070
00071 PrecUserDefLU (const Precond_prm& p);
00072 virtual ~PrecUserDefLU () { }
00073
00074
00075
00076 virtual void init (PrecBasis& Apb);
00077
00078 virtual void apply
00079 (
00080 const LinEqVector& c,
00081 LinEqVector& d,
00082 TransposeMode tpmode = NOT_TRANSPOSED
00083 );
00084
00085 virtual int getWork (const PrecondWork work_tp = APPLY_PREC_WORK) const;
00086
00087 virtual String description () const;
00088
00089 CLASS_INFO
00090 };
00091
00092
00115 class PrecUserDefInv : public PrecAlgebraic
00116
00117 {
00118 public:
00119
00120 PrecUserDefInv (const Precond_prm& p);
00121 virtual ~PrecUserDefInv () { }
00122
00123
00124
00125 virtual void apply
00126 (
00127 const LinEqVector& c,
00128 LinEqVector& d,
00129 TransposeMode tpmode = NOT_TRANSPOSED
00130 );
00131
00132 virtual int getWork (const PrecondWork work_tp = APPLY_PREC_WORK) const;
00133
00134 virtual String description () const;
00135
00136 CLASS_INFO
00137 };
00138
00139
00163 class PrecUserDefMat : public PrecAlgebraic
00164
00165 {
00166 public:
00167
00168 PrecUserDefMat (const Precond_prm& p);
00169 virtual ~PrecUserDefMat () { }
00170
00171
00172
00173 virtual bool ok () const { return getbool( (PrecAlgebraic :: ok())); }
00174
00175 virtual void apply
00176 (
00177 const LinEqVector& c,
00178 LinEqVector& d,
00179 TransposeMode tpmode = NOT_TRANSPOSED
00180 );
00181
00182 virtual int getWork (const PrecondWork work_tp = APPLY_PREC_WORK) const;
00183
00184 virtual String description () const;
00185
00186 CLASS_INFO
00187 };
00188
00189
00213 class PrecRILU : public PrecAlgebraic
00214
00215 {
00216 FactStrategy fstrategy;
00217
00218 public:
00219
00220 PrecRILU (const Precond_prm& p);
00221 virtual ~PrecRILU () {}
00222
00223
00224
00225 virtual void init (PrecBasis& Apb);
00226 virtual void apply
00227 (
00228 const LinEqVector& c,
00229 LinEqVector& d,
00230 TransposeMode tpmode = NOT_TRANSPOSED
00231 );
00232
00233 virtual int getWork (const PrecondWork work_tp = APPLY_PREC_WORK) const;
00234 virtual real getStorage () const;
00235
00236 virtual void performance (PrecondStatistics& precStat);
00237
00238 virtual String description () const;
00239
00240 CLASS_INFO
00241 };
00242
00243
00267 class PrecJacobi : public PrecAlgebraic
00268
00269 {
00270 public:
00271
00272 PrecJacobi (const Precond_prm& p);
00273 virtual ~PrecJacobi () {}
00274
00275
00276
00277 virtual void apply
00278 (
00279 const LinEqVector& c,
00280 LinEqVector& d,
00281 TransposeMode tpmode = NOT_TRANSPOSED
00282 );
00283
00284
00285 virtual int getWork (const PrecondWork work_tp = APPLY_PREC_WORK) const;
00286
00287 virtual String description () const;
00288
00289 CLASS_INFO
00290 };
00291
00292
00314 class PrecSOR : public PrecAlgebraic
00315
00316 {
00317 real omega;
00318
00319 public:
00320
00321 PrecSOR (const Precond_prm& p);
00322 virtual ~PrecSOR () {}
00323
00324
00325
00326 virtual void apply
00327 (
00328 const LinEqVector& c,
00329 LinEqVector& d,
00330 TransposeMode tpmode = NOT_TRANSPOSED
00331 );
00332
00333 virtual int getWork (const PrecondWork work_tp = APPLY_PREC_WORK) const;
00334
00335 virtual void performance (PrecondStatistics& precStat);
00336
00337 virtual String description () const;
00338
00339 CLASS_INFO
00340 };
00341
00342
00364 class PrecSSOR : public PrecAlgebraic
00365
00366 {
00367 real omega;
00368
00369 public:
00370
00371 PrecSSOR (const Precond_prm& p);
00372 virtual ~PrecSSOR () {}
00373
00374
00375
00376 virtual void apply
00377 (
00378 const LinEqVector& c,
00379 LinEqVector& d,
00380 TransposeMode tpmode = NOT_TRANSPOSED
00381 );
00382
00383 virtual int getWork (const PrecondWork work_tp = APPLY_PREC_WORK) const;
00384
00385 virtual void performance (PrecondStatistics& precStat);
00386
00387 virtual String description () const;
00388
00389 CLASS_INFO
00390 };
00391
00392