Stokhos Package Browser (Single Doxygen Collection)  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Stokhos_MLPrecOp.hpp
Go to the documentation of this file.
1 // @HEADER
2 // *****************************************************************************
3 // Stokhos Package
4 //
5 // Copyright 2009 NTESS and the Stokhos contributors.
6 // SPDX-License-Identifier: BSD-3-Clause
7 // *****************************************************************************
8 // @HEADER
9 
35 /* ******************************************************************** */
36 /* See the file COPYRIGHT for a complete copyright notice, contact */
37 /* person and disclaimer. */
38 /* ******************************************************************** */
39 
40 #ifndef STOKHOS_MLPRECOP_HPP
41 #define STOKHOS_MLPRECOP_HPP
42 
43 #include "Stokhos_ConfigDefs.h"
44 
45 #ifdef HAVE_STOKHOS_ML
46 
47 #include "Epetra_ConfigDefs.h"
48 #ifdef HAVE_MPI
49 #include <mpi.h>
50 #include "Epetra_MpiComm.h"
51 #else
52 #include "Epetra_SerialComm.h"
53 #endif
54 #include "Epetra_Map.h"
55 #include "Epetra_Vector.h"
56 #include "Epetra_CrsMatrix.h"
58 #include "Epetra_MultiVector.h"
59 #include "ml_include.h"
60 #include "ml_MultiLevelPreconditioner.h"
61 //#include "Epetra_LinearProblem.h"
62 //#include "Epetra_Object.h"
63 
64 #include "Teuchos_Array.hpp"
65 
66 
68 
73 namespace Stokhos{
74 
75 class MLPrecOp: public virtual Epetra_Operator {
76 
77  public:
78 
80  MLPrecOp(const Epetra_CrsMatrix& mean_op, const Teuchos::Array<double>& norms, const Epetra_Comm& Comm, const Epetra_Map& DMap, const Epetra_Map& RMap);
82  ~MLPrecOp(){}
85 
86 
88 
99  int SetUseTranspose (bool /* UseTheTranspose */) { return -1; }
101 
103 
105 
110  int Apply(const Epetra_MultiVector& X, Epetra_MultiVector& Y) const {return -1;};
111 
113 
121 // int ApplyInverse(const Epetra_MultiVector& X, Epetra_MultiVector& Y, int iBlockSize = WKC) const;
122  int ApplyInverse(const Epetra_MultiVector& X, Epetra_MultiVector& Y) const;
123 
124  //int ApplyInverse(const Epetra_MultiVector& X, Epetra_MultiVector& Y) const;
125 
127  /* Returns the quantity \f$ \| A \|_\infty\f$ such that
128  \f[\| A \|_\infty = \max_{1\lei\lem} \sum_{j=1}^n |a_{ij}| \f].
129 
130  \warning This method must not be called unless HasNormInf() returns true.
131  */
132  double NormInf() const {return(0.0);};
134 
136 
138  const char * Label() const{return(Label_);};
139 
141  bool UseTranspose() const {return(false);};
142 
144  bool HasNormInf() const{return(false);};
145 
147  const Epetra_Comm & Comm() const{return(Comm_);};
148 
150  const Epetra_Map & OperatorDomainMap() const {return(DomainMap_);};
152  const Epetra_Map & OperatorRangeMap() const {return(RangeMap_);};
154 
155  private:
157  //StochGalerkinFiniteDiffSystem(const StochGalerkinFiniteDiffSystem& RHS) :
158  // Comm_(RHS.Comm()),
159  // DomainMap_(RHS.OperatorDomainMap()),
160  // RangeMap_(RHS.OperatorRangeMap())
161  //{ }
162 
164  MLPrecOp& operator=(const MLPrecOp&)
165  {
166  return(*this);
167  }
168 
170  const Epetra_Comm& Comm_;
171  const char * Label_;
173  const Epetra_Map& DomainMap_;
175  const Epetra_Map& RangeMap_;
176 
177  const Teuchos::Array<double>& norms_;
178 
179  ML_Epetra::MultiLevelPreconditioner* MLPrec;
180 
181 };
182 }
183 
184 #endif // HAVE_STOKHOS_ML
185 
186 #endif /* SACADO_STOCHGAL_DIFF_H*/
187