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_STATICCONDENSATION_H
00030 #define EpetraExt_LINEARPROBLEM_STATICCONDENSATION_H
00031
00032 #include <EpetraExt_Transform.h>
00033
00034 class Epetra_LinearProblem;
00035 class Epetra_Map;
00036 class Epetra_MultiVector;
00037 class Epetra_CrsGraph;
00038 class Epetra_CrsMatrix;
00039 class Epetra_Export;
00040
00041 namespace EpetraExt {
00042
00043 class LinearProblem_StaticCondensation : public SameTypeTransform<Epetra_LinearProblem>
00044 {
00045 const int degree_;
00046 const bool verbose_;
00047
00048 const Epetra_Map * OldRowMap_;
00049 Epetra_LinearProblem * OldProblem_;
00050 Epetra_MultiVector * OldRHS_;
00051 Epetra_MultiVector * OldLHS_;
00052 const Epetra_CrsGraph * OldGraph_;
00053 Epetra_CrsMatrix * OldMatrix_;
00054
00055 Epetra_Export * Exporter_;
00056
00057 Epetra_Map * NewRowMap_;
00058 Epetra_Map * NewColMap_;
00059 Epetra_LinearProblem * NewProblem_;
00060 Epetra_MultiVector * NewRHS_;
00061 Epetra_MultiVector * NewLHS_;
00062 Epetra_CrsGraph * NewGraph_;
00063 Epetra_CrsMatrix * NewMatrix_;
00064
00065 Epetra_Map * UMap_;
00066 Epetra_Map * RMap_;
00067 Epetra_Map * LMap_;
00068
00069 Epetra_Export * UExporter_;
00070 Epetra_Export * RExporter_;
00071 Epetra_Export * LExporter_;
00072
00073 Epetra_MultiVector * ULHS_;
00074 Epetra_MultiVector * RLHS_;
00075 Epetra_MultiVector * LLHS_;
00076
00077 Epetra_MultiVector * URHS_;
00078 Epetra_MultiVector * RRHS_;
00079 Epetra_MultiVector * LRHS_;
00080
00081 Epetra_CrsGraph * UUGraph_;
00082 Epetra_CrsGraph * URGraph_;
00083 Epetra_CrsGraph * ULGraph_;
00084 Epetra_CrsGraph * RRGraph_;
00085 Epetra_CrsGraph * RLGraph_;
00086 Epetra_CrsGraph * LLGraph_;
00087
00088 Epetra_CrsMatrix * UUMatrix_;
00089 Epetra_CrsMatrix * URMatrix_;
00090 Epetra_CrsMatrix * ULMatrix_;
00091 Epetra_CrsMatrix * RRMatrix_;
00092 Epetra_CrsMatrix * RLMatrix_;
00093 Epetra_CrsMatrix * LLMatrix_;
00094
00095 public:
00096
00097 ~LinearProblem_StaticCondensation();
00098
00099 LinearProblem_StaticCondensation( int degree = 1, bool verbose = false )
00100 : degree_(degree),
00101 verbose_(verbose),
00102 OldRowMap_(0),
00103 OldProblem_(0),
00104 OldRHS_(0),
00105 OldLHS_(0),
00106 OldGraph_(0),
00107 OldMatrix_(0),
00108 Exporter_(0),
00109 NewRowMap_(0),
00110 NewColMap_(0),
00111 NewProblem_(0),
00112 NewRHS_(0),
00113 NewLHS_(0),
00114 NewGraph_(0),
00115 NewMatrix_(0),
00116 UMap_(0),
00117 RMap_(0),
00118 LMap_(0),
00119 UExporter_(0),
00120 RExporter_(0),
00121 LExporter_(0),
00122 ULHS_(0),
00123 RLHS_(0),
00124 LLHS_(0),
00125 URHS_(0),
00126 RRHS_(0),
00127 LRHS_(0),
00128 UUGraph_(0),
00129 URGraph_(0),
00130 ULGraph_(0),
00131 RRGraph_(0),
00132 RLGraph_(0),
00133 LLGraph_(0),
00134 UUMatrix_(0),
00135 URMatrix_(0),
00136 ULMatrix_(0),
00137 RRMatrix_(0),
00138 RLMatrix_(0),
00139 LLMatrix_(0)
00140 {}
00141
00142 NewTypeRef operator()( OriginalTypeRef orig );
00143
00144 bool fwd();
00145 bool rvs();
00146 };
00147
00148 }
00149
00150 #endif //EpetraExt_LINEARPROBLEM_STATICCONDENSATION_H