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
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #ifndef IFPACK_OVERLAPGRAPH_H
00044 #define IFPACK_OVERLAPGRAPH_H
00045
00046 #include "Ifpack_ConfigDefs.h"
00047 #include "Epetra_Object.h"
00048 #include "Epetra_CrsGraph.h"
00049 #include "Epetra_Import.h"
00050 #include "Teuchos_RefCountPtr.hpp"
00051
00052 class Epetra_Comm;
00053 class Epetra_BlockMap;
00054 class Epetra_RowMatrix;
00055
00056 namespace Teuchos {
00057 class ParameterList;
00058 }
00059
00061
00062 class Ifpack_OverlapGraph: public Epetra_Object {
00063
00064 public:
00066
00067
00071 Ifpack_OverlapGraph(const Teuchos::RefCountPtr<const Epetra_CrsGraph>& UserMatrixGraph_in, int OverlapLevel_in);
00072
00074
00079 Ifpack_OverlapGraph(const Teuchos::RefCountPtr<const Epetra_RowMatrix>& UserMatrix_in, int OverlapLevel_in);
00080
00082 Ifpack_OverlapGraph(const Ifpack_OverlapGraph & Source);
00083
00085 virtual ~Ifpack_OverlapGraph() {};
00087
00089
00091
00092
00093
00094
00095
00096 int SetParameters(const Teuchos::ParameterList& parameterlist,
00097 bool cerr_warning_if_unused=false);
00098
00100 const Epetra_CrsGraph & OverlapGraph() const {return(*OverlapGraph_);}
00101
00103 const Epetra_BlockMap & OverlapRowMap() const {return(*OverlapRowMap_);}
00104
00106 const Epetra_Import & OverlapImporter() const {return(*OverlapImporter_);}
00107
00109
00114 int OverlapLevel() const {return(OverlapLevel_);}
00116
00118
00119 void Print(ostream& os) const {
00120 os << endl;
00121 if (UserMatrix_!=Teuchos::null)
00122 os << "Overlap Graph created using the user's Epetra_RowMatrix object" << endl;
00123 else
00124 os << "Overlap Graph created using the user's Epetra_CrsGraph object" << endl;
00125
00126 os << " Level of Overlap = " << OverlapLevel_ << endl;
00127 OverlapGraph_->Print(os);
00128 return;
00129 }
00131
00132 protected:
00133
00134 int ConstructOverlapGraph(const Teuchos::RefCountPtr<const Epetra_CrsGraph>& UserMatrixGraph);
00135 Teuchos::RefCountPtr<Epetra_CrsGraph> OverlapGraph_;
00136 Teuchos::RefCountPtr<const Epetra_CrsGraph> UserMatrixGraph_;
00137 Teuchos::RefCountPtr<const Epetra_RowMatrix> UserMatrix_;
00138 Teuchos::RefCountPtr<Epetra_BlockMap> OverlapRowMap_;
00139 Teuchos::RefCountPtr<Epetra_Import> OverlapImporter_;
00140 int OverlapLevel_;
00141 bool IsOverlapped_;
00142 };
00143 #endif // IFPACK_OVERLAPGRAPH_H