00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef EpetraExt_LINEARPROBLEM_SCALE_H
00030 #define EpetraExt_LINEARPROBLEM_SCALE_H
00031
00032 #include <vector>
00033
00034 #include <EpetraExt_Transform.h>
00035
00036 class Epetra_LinearProblem;
00037 class Epetra_Vector;
00038
00039 namespace EpetraExt {
00040
00042
00044 class LinearProblem_Scale : public InPlaceTransform<Epetra_LinearProblem>
00045 {
00046 public:
00047
00048 enum ScaleType{ Sum, Max, Diag, None };
00049
00051
00053 ~LinearProblem_Scale();
00054
00056
00058 LinearProblem_Scale( ScaleType left = Sum,
00059 ScaleType right = Sum,
00060 double exp_fac = 1.0,
00061 int iterations = 1 )
00062 : lScale_(left),
00063 rScale_(right),
00064 expFac_(exp_fac),
00065 iters_(iterations),
00066 scaled_(false)
00067 {}
00068
00070
00072 bool fwd();
00073
00075
00077 bool rvs();
00078
00079 private:
00080
00081 const ScaleType lScale_;
00082 const ScaleType rScale_;
00083
00084 const double expFac_;
00085
00086 const int iters_;
00087
00088 bool scaled_;
00089
00090 std::vector<Epetra_Vector*> lScaleVecs_;
00091 std::vector<Epetra_Vector*> rScaleVecs_;
00092 };
00093
00094 }
00095
00096 #endif //EpetraExt_LINEARPROBLEM_SCALE_H
00097