00001 00005 class PrecAction : public virtual HandleId 00006 00007 { 00008 public: 00009 00010 PrecAction () {} 00011 ~PrecAction (); 00012 00013 virtual void genAction 00014 (LinEqVector&, LinEqVector&, TransposeMode); 00015 00016 virtual void matAction 00017 (LinEqMatrix&, LinEqVector&, LinEqVector&, TransposeMode); 00018 00019 virtual real getStorage () const { return 0; } 00020 virtual int getWork (const PrecondWork /*work_tp = APPLY_PREC_WORK*/) const 00021 { return 0; } 00022 }; 00023 00024 00056 class Precond_prm : public HandleId 00057 00058 { 00059 protected: 00060 00061 StringList subclasses; 00062 static Handle(Precond_prm) master; 00063 virtual Precond_prm* clone () { return new Precond_prm(); } 00064 00065 Precond_prm (); 00066 00067 public: 00068 00069 static Precond_prm* construct (); 00070 virtual ~Precond_prm (); 00071 00072 String prec_tp; 00073 00074 bool left; 00075 00076 bool auto_init; 00077 00078 int fillin_level; 00079 real relax_RILU; 00080 00081 real relax_SSOR; 00082 00083 int inner_steps; 00084 00085 Handle(PrecAction) precproc; 00086 00087 void operator = (const Precond_prm& p); 00088 00089 static void defineStatic (MenuSystem& menu, int level = MAIN); 00090 void define (MenuSystem& menu, int level = MAIN) 00091 { defineStatic (menu, level); } 00092 void scan (MenuSystem& menu); 00093 00094 void print (Os os) const; 00095 00096 virtual Precond* create () const; 00097 const StringList& hier () const { return subclasses; } 00098 static const StringList& hierStatic () { return master->hier(); } 00099 static void registerPrmSubclass (Precond_prm& sc) { master.rebind (sc); } 00100 static void unregisterPrmSubclass () { master.rebind (new Precond_prm()); } 00101 }; 00102 00103