MueLu  Version of the Day
MueLu_Utilities_decl.hpp
Go to the documentation of this file.
1 // @HEADER
2 //
3 // ***********************************************************************
4 //
5 // MueLu: A package for multigrid based preconditioning
6 // Copyright 2012 Sandia Corporation
7 //
8 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9 // the U.S. Government retains certain rights in this software.
10 //
11 // Redistribution and use in source and binary forms, with or without
12 // modification, are permitted provided that the following conditions are
13 // met:
14 //
15 // 1. Redistributions of source code must retain the above copyright
16 // notice, this list of conditions and the following disclaimer.
17 //
18 // 2. Redistributions in binary form must reproduce the above copyright
19 // notice, this list of conditions and the following disclaimer in the
20 // documentation and/or other materials provided with the distribution.
21 //
22 // 3. Neither the name of the Corporation nor the names of the
23 // contributors may be used to endorse or promote products derived from
24 // this software without specific prior written permission.
25 //
26 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37 //
38 // Questions? Contact
39 // Jonathan Hu (jhu@sandia.gov)
40 // Andrey Prokopenko (aprokop@sandia.gov)
41 // Ray Tuminaro (rstumin@sandia.gov)
42 //
43 // ***********************************************************************
44 //
45 // @HEADER
46 #ifndef MUELU_UTILITIES_DECL_HPP
47 #define MUELU_UTILITIES_DECL_HPP
48 
49 #include <string>
50 
51 #include "MueLu_ConfigDefs.hpp"
52 
53 #include <Teuchos_DefaultComm.hpp>
54 #include <Teuchos_ScalarTraits.hpp>
56 
57 #ifdef HAVE_MUELU_TPETRA
59 #endif
61 #include <Xpetra_CrsMatrix_fwd.hpp>
63 #include <Xpetra_Map_fwd.hpp>
65 #include <Xpetra_Matrix_fwd.hpp>
69 #include <Xpetra_Operator_fwd.hpp>
70 #include <Xpetra_Vector_fwd.hpp>
72 #include <Xpetra_ExportFactory.hpp>
73 
74 #include <Xpetra_Import.hpp>
75 #include <Xpetra_ImportFactory.hpp>
76 #include <Xpetra_MatrixMatrix.hpp>
77 
78 #ifdef HAVE_MUELU_EPETRA
80 
81 // needed because of inlined function
82 //TODO: remove inline function?
84 #include <Xpetra_CrsMatrixWrap.hpp>
85 
86 #endif
87 
88 #include "MueLu_Exceptions.hpp"
89 
90 #ifdef HAVE_MUELU_EPETRAEXT
91 class Epetra_CrsMatrix;
92 class Epetra_MultiVector;
93 class Epetra_Vector;
94 #include "EpetraExt_Transpose_RowMatrix.h"
95 #endif
96 
97 #ifdef HAVE_MUELU_TPETRA
98 #include <Tpetra_CrsMatrix.hpp>
99 #include <Tpetra_RowMatrixTransposer.hpp>
100 #include <Tpetra_Map.hpp>
101 #include <Tpetra_MultiVector.hpp>
104 #endif
105 
106 #include <MueLu_UtilitiesBase.hpp>
107 
108 
109 namespace MueLu {
110 
111 #ifdef HAVE_MUELU_EPETRA
112  //defined after Utilities class
113  template<typename SC,typename LO,typename GO,typename NO>
114  RCP<Xpetra::CrsMatrixWrap<SC,LO,GO,NO> >
115  Convert_Epetra_CrsMatrix_ToXpetra_CrsMatrixWrap(RCP<Epetra_CrsMatrix> &epAB);
116 
117  template<typename SC,typename LO,typename GO,typename NO>
118  RCP<Xpetra::Matrix<SC, LO, GO, NO> >
120 
121  template<typename SC,typename LO,typename GO,typename NO>
122  RCP<Xpetra::MultiVector<SC, LO, GO, NO> >
124 #endif
125 
126 #ifdef HAVE_MUELU_TPETRA
127  template<typename SC,typename LO,typename GO,typename NO>
128  RCP<Xpetra::Matrix<SC, LO, GO, NO> >
130 
131 
132  template<typename SC,typename LO,typename GO,typename NO>
133  RCP<Xpetra::MultiVector<SC, LO, GO, NO> >
135 #endif
136 
144  template <class Scalar,
145  class LocalOrdinal = int,
146  class GlobalOrdinal = LocalOrdinal,
148  class Utilities : public UtilitiesBase<Scalar, LocalOrdinal, GlobalOrdinal, Node> {
149 #undef MUELU_UTILITIES_SHORT
150  //#include "MueLu_UseShortNames.hpp"
151 
152  public:
154 
155 #ifdef HAVE_MUELU_EPETRA
156  // @{
160 
163 
166 
169 
171  // @}
172 #endif
173 
174 #ifdef HAVE_MUELU_TPETRA
179 
182 
185 
188 
191 
192 
194 #endif
195 
212 
214 
215  static Scalar PowerMethod(const Xpetra::Matrix<Scalar,LocalOrdinal,GlobalOrdinal,Node>& A, bool scaleByDiag = true,
216  LocalOrdinal niters = 10, Magnitude tolerance = 1e-2, bool verbose = false, unsigned int seed = 123) {
218  }
219 
222  }
223 
224  static void MyOldScaleMatrix(Xpetra::Matrix<Scalar,LocalOrdinal,GlobalOrdinal,Node>& Op, const Teuchos::ArrayRCP<const Scalar>& scalingVector, bool doInverse = true,
225  bool doFillComplete = true, bool doOptimizeStorage = true);
226 
228  bool doFillComplete, bool doOptimizeStorage);
230  bool doFillComplete, bool doOptimizeStorage);
231 
232  static RCP<Xpetra::Matrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> > Transpose(Xpetra::Matrix<Scalar,LocalOrdinal,GlobalOrdinal,Node>& Op, bool optimizeTranspose = false,const std::string & label = std::string(),const Teuchos::RCP<Teuchos::ParameterList> &params=Teuchos::null);
233 
235 
237 
238  static void FindDirichletRows(Teuchos::RCP<Xpetra::Matrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> > & A, std::vector<LocalOrdinal>& dirichletRows,bool count_twos_as_dirichlet=false) {
240  }
241 
242 
243  static void ApplyOAZToMatrixRows(Teuchos::RCP<Xpetra::Matrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> >& A,const std::vector<LocalOrdinal>& dirichletRows) {
245  }
246 
249  }
250 
251  static void ZeroDirichletRows(Teuchos::RCP<Xpetra::Matrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> >& A,const std::vector<LocalOrdinal>& dirichletRows, Scalar replaceWith=Teuchos::ScalarTraits<Scalar>::zero()) {
253  }
254 
257  }
258 
261  }
262 
265  }
266 
267  }; // class Utilities
268 
270 
271 #ifdef HAVE_MUELU_EPETRA
272 
281  template <>
282  class Utilities<double,int,int,Xpetra::EpetraNode> : public UtilitiesBase<double,int,int,Xpetra::EpetraNode> {
283  public:
284  typedef double Scalar;
285  typedef int LocalOrdinal;
286  typedef int GlobalOrdinal;
289 
290  private:
297 #ifdef HAVE_MUELU_EPETRA
301 #endif
302  public:
303 
304 #ifdef HAVE_MUELU_EPETRA
305  // @{
308  RCP<const EpetraMultiVector > tmpVec = rcp_dynamic_cast<EpetraMultiVector>(vec);
309  if (tmpVec == Teuchos::null)
310  throw Exceptions::BadCast("Cast from Xpetra::MultiVector to Xpetra::EpetraMultiVector failed");
311  return tmpVec->getEpetra_MultiVector();
312  }
314  RCP<const EpetraMultiVector> tmpVec = rcp_dynamic_cast<EpetraMultiVector>(vec);
315  if (tmpVec == Teuchos::null)
316  throw Exceptions::BadCast("Cast from Xpetra::MultiVector to Xpetra::EpetraMultiVector failed");
317  return tmpVec->getEpetra_MultiVector();
318  }
319 
320  static const Epetra_MultiVector& MV2EpetraMV(const MultiVector& vec) {
321  const EpetraMultiVector& tmpVec = dynamic_cast<const EpetraMultiVector&>(vec);
322  return *(tmpVec.getEpetra_MultiVector());
323  }
325  const EpetraMultiVector& tmpVec = dynamic_cast<const EpetraMultiVector&>(vec);
326  return *(tmpVec.getEpetra_MultiVector());
327  }
328 
330  RCP<const CrsMatrixWrap> crsOp = rcp_dynamic_cast<const CrsMatrixWrap>(Op);
331  if (crsOp == Teuchos::null)
332  throw Exceptions::BadCast("Cast from Xpetra::Matrix to Xpetra::CrsMatrixWrap failed");
333  const RCP<const EpetraCrsMatrix>& tmp_ECrsMtx = rcp_dynamic_cast<const EpetraCrsMatrix>(crsOp->getCrsMatrix());
334  if (tmp_ECrsMtx == Teuchos::null)
335  throw Exceptions::BadCast("Cast from Xpetra::CrsMatrix to Xpetra::EpetraCrsMatrix failed");
336  return tmp_ECrsMtx->getEpetra_CrsMatrix();
337  }
339  RCP<const CrsMatrixWrap> crsOp = rcp_dynamic_cast<const CrsMatrixWrap>(Op);
340  if (crsOp == Teuchos::null)
341  throw Exceptions::BadCast("Cast from Xpetra::Matrix to Xpetra::CrsMatrixWrap failed");
342  const RCP<const EpetraCrsMatrix> &tmp_ECrsMtx = rcp_dynamic_cast<const EpetraCrsMatrix>(crsOp->getCrsMatrix());
343  if (tmp_ECrsMtx == Teuchos::null)
344  throw Exceptions::BadCast("Cast from Xpetra::CrsMatrix to Xpetra::EpetraCrsMatrix failed");
345  return tmp_ECrsMtx->getEpetra_CrsMatrixNonConst();
346  }
347 
348  static const Epetra_CrsMatrix& Op2EpetraCrs(const Matrix& Op) {
349  try {
350  const CrsMatrixWrap& crsOp = dynamic_cast<const CrsMatrixWrap&>(Op);
351  try {
352  const EpetraCrsMatrix& tmp_ECrsMtx = dynamic_cast<const EpetraCrsMatrix&>(*crsOp.getCrsMatrix());
353  return *tmp_ECrsMtx.getEpetra_CrsMatrix();
354  } catch (std::bad_cast) {
355  throw Exceptions::BadCast("Cast from Xpetra::CrsMatrix to Xpetra::EpetraCrsMatrix failed");
356  }
357  } catch (std::bad_cast) {
358  throw Exceptions::BadCast("Cast from Xpetra::Matrix to Xpetra::CrsMatrixWrap failed");
359  }
360  }
362  try {
363  CrsMatrixWrap& crsOp = dynamic_cast<CrsMatrixWrap&>(Op);
364  try {
365  EpetraCrsMatrix& tmp_ECrsMtx = dynamic_cast<EpetraCrsMatrix&>(*crsOp.getCrsMatrix());
366  return *tmp_ECrsMtx.getEpetra_CrsMatrixNonConst();
367  } catch (std::bad_cast) {
368  throw Exceptions::BadCast("Cast from Xpetra::CrsMatrix to Xpetra::EpetraCrsMatrix failed");
369  }
370  } catch (std::bad_cast) {
371  throw Exceptions::BadCast("Cast from Xpetra::Matrix to Xpetra::CrsMatrixWrap failed");
372  }
373  }
374 
375  static const Epetra_Map& Map2EpetraMap(const Map& map) {
376  RCP<const EpetraMap> xeMap = rcp_dynamic_cast<const EpetraMap>(rcpFromRef(map));
377  if (xeMap == Teuchos::null)
378  throw Exceptions::BadCast("Utilities::Map2EpetraMap : Cast from Xpetra::Map to Xpetra::EpetraMap failed");
379  return xeMap->getEpetra_Map();
380  }
381  // @}
382 #endif
383 
384 #ifdef HAVE_MUELU_TPETRA
387 #if ((defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_OPENMP) || !defined(HAVE_TPETRA_INST_INT_INT))) || \
388  (!defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_SERIAL) || !defined(HAVE_TPETRA_INST_INT_INT))))
389  throw Exceptions::RuntimeError("MV2TpetraMV: Tpetra has not been compiled with support for LO=GO=int.");
390 #else
392  if (tmpVec == Teuchos::null)
393  throw Exceptions::BadCast("Cast from Xpetra::MultiVector to Xpetra::TpetraMultiVector failed");
394  return tmpVec->getTpetra_MultiVector();
395 #endif
396  }
398 #if ((defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_OPENMP) || !defined(HAVE_TPETRA_INST_INT_INT))) || \
399  (!defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_SERIAL) || !defined(HAVE_TPETRA_INST_INT_INT))))
400  throw Exceptions::RuntimeError("MV2NonConstTpetraMV: Tpetra has not been compiled with support for LO=GO=int.");
401 #else
403  if (tmpVec == Teuchos::null)
404  throw Exceptions::BadCast("Cast from Xpetra::MultiVector to Xpetra::TpetraMultiVector failed");
405  return tmpVec->getTpetra_MultiVector();
406 #endif
407 
408  }
410 #if ((defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_OPENMP) || !defined(HAVE_TPETRA_INST_INT_INT))) || \
411  (!defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_SERIAL) || !defined(HAVE_TPETRA_INST_INT_INT))))
412  throw Exceptions::RuntimeError("MV2NonConstTpetraMV2: Tpetra has not been compiled with support for LO=GO=int.");
413 #else
415  return tmpVec.getTpetra_MultiVector();
416 #endif
417  }
418 
420 #if ((defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_OPENMP) || !defined(HAVE_TPETRA_INST_INT_INT))) || \
421  (!defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_SERIAL) || !defined(HAVE_TPETRA_INST_INT_INT))))
422  throw Exceptions::RuntimeError("MV2TpetraMV: Tpetra has not been compiled with support for LO=GO=int.");
423 #else
425  return *(tmpVec.getTpetra_MultiVector());
426 #endif
427  }
429 #if ((defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_OPENMP) || !defined(HAVE_TPETRA_INST_INT_INT))) || \
430  (!defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_SERIAL) || !defined(HAVE_TPETRA_INST_INT_INT))))
431  throw Exceptions::RuntimeError("MV2NonConstTpetraMV: Tpetra has not been compiled with support for LO=GO=int.");
432 #else
434  return *(tmpVec.getTpetra_MultiVector());
435 #endif
436  }
437 
439 #if ((defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_OPENMP) || !defined(HAVE_TPETRA_INST_INT_INT))) || \
440  (!defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_SERIAL) || !defined(HAVE_TPETRA_INST_INT_INT))))
441  throw Exceptions::RuntimeError("Op2TpetraCrs: Tpetra has not been compiled with support for LO=GO=int.");
442 #else
443  // Get the underlying Tpetra Mtx
444  RCP<const CrsMatrixWrap> crsOp = rcp_dynamic_cast<const CrsMatrixWrap>(Op);
445  if (crsOp == Teuchos::null)
446  throw Exceptions::BadCast("Cast from Xpetra::Matrix to Xpetra::CrsMatrixWrap failed");
448  if (tmp_ECrsMtx == Teuchos::null)
449  throw Exceptions::BadCast("Cast from Xpetra::CrsMatrix to Xpetra::TpetraCrsMatrix failed");
450  return tmp_ECrsMtx->getTpetra_CrsMatrix();
451 #endif
452  }
454 #if ((defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_OPENMP) || !defined(HAVE_TPETRA_INST_INT_INT))) || \
455  (!defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_SERIAL) || !defined(HAVE_TPETRA_INST_INT_INT))))
456  throw Exceptions::RuntimeError("Op2NonConstTpetraCrs: Tpetra has not been compiled with support for LO=GO=int.");
457 #else
458  RCP<const CrsMatrixWrap> crsOp = rcp_dynamic_cast<const CrsMatrixWrap>(Op);
459  if (crsOp == Teuchos::null)
460  throw Exceptions::BadCast("Cast from Xpetra::Matrix to Xpetra::CrsMatrixWrap failed");
462  if (tmp_ECrsMtx == Teuchos::null)
463  throw Exceptions::BadCast("Cast from Xpetra::CrsMatrix to Xpetra::TpetraCrsMatrix failed");
464  return tmp_ECrsMtx->getTpetra_CrsMatrixNonConst();
465 #endif
466  };
467 
469 #if ((defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_OPENMP) || !defined(HAVE_TPETRA_INST_INT_INT))) || \
470  (!defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_SERIAL) || !defined(HAVE_TPETRA_INST_INT_INT))))
471  throw Exceptions::RuntimeError("Op2TpetraCrs: Tpetra has not been compiled with support for LO=GO=int.");
472 #else
473  try {
474  const CrsMatrixWrap& crsOp = dynamic_cast<const CrsMatrixWrap&>(Op);
475  try {
477  return *tmp_ECrsMtx.getTpetra_CrsMatrix();
478  } catch (std::bad_cast) {
479  throw Exceptions::BadCast("Cast from Xpetra::CrsMatrix to Xpetra::TpetraCrsMatrix failed");
480  }
481  } catch (std::bad_cast) {
482  throw Exceptions::BadCast("Cast from Xpetra::Matrix to Xpetra::CrsMatrixWrap failed");
483  }
484 #endif
485  }
487 #if ((defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_OPENMP) || !defined(HAVE_TPETRA_INST_INT_INT))) || \
488  (!defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_SERIAL) || !defined(HAVE_TPETRA_INST_INT_INT))))
489  throw Exceptions::RuntimeError("Op2NonConstTpetraCrs: Tpetra has not been compiled with support for LO=GO=int.");
490 #else
491  try {
492  CrsMatrixWrap& crsOp = dynamic_cast<CrsMatrixWrap&>(Op);
493  try {
495  return *tmp_ECrsMtx.getTpetra_CrsMatrixNonConst();
496  } catch (std::bad_cast) {
497  throw Exceptions::BadCast("Cast from Xpetra::CrsMatrix to Xpetra::TpetraCrsMatrix failed");
498  }
499  } catch (std::bad_cast) {
500  throw Exceptions::BadCast("Cast from Xpetra::Matrix to Xpetra::CrsMatrixWrap failed");
501  }
502 #endif
503  }
504 
506 #if ((defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_OPENMP) || !defined(HAVE_TPETRA_INST_INT_INT))) || \
507  (!defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_SERIAL) || !defined(HAVE_TPETRA_INST_INT_INT))))
508  throw Exceptions::RuntimeError("Op2TpetraRow: Tpetra has not been compiled with support for LO=GO=int.");
509 #else
510  RCP<const CrsMatrixWrap> crsOp = rcp_dynamic_cast<const CrsMatrixWrap>(Op);
511  if (crsOp == Teuchos::null)
512  throw Exceptions::BadCast("Cast from Xpetra::Matrix to Xpetra::CrsMatrixWrap failed");
513 
514  RCP<const CrsMatrix> crsMat = crsOp->getCrsMatrix();
517  if(!tmp_Crs.is_null()) {
518  return tmp_Crs->getTpetra_CrsMatrixNonConst();
519  }
520  else {
521  tmp_BlockCrs= rcp_dynamic_cast<const Xpetra::TpetraBlockCrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> >(crsMat);
522  if (tmp_BlockCrs.is_null())
523  throw Exceptions::BadCast("Cast from Xpetra::CrsMatrix to Xpetra::TpetraCrsMatrix and Xpetra::TpetraBlockCrsMatrix failed");
524  return tmp_BlockCrs->getTpetra_BlockCrsMatrixNonConst();
525  }
526 #endif
527  }
529 #if ((defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_OPENMP) || !defined(HAVE_TPETRA_INST_INT_INT))) || \
530  (!defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_SERIAL) || !defined(HAVE_TPETRA_INST_INT_INT))))
531  throw Exceptions::RuntimeError("Op2NonConstTpetraRow: Tpetra has not been compiled with support for LO=GO=int.");
532 #else
533  RCP<const CrsMatrixWrap> crsOp = rcp_dynamic_cast<const CrsMatrixWrap>(Op);
534  if (crsOp == Teuchos::null)
535  throw Exceptions::BadCast("Cast from Xpetra::Matrix to Xpetra::CrsMatrixWrap failed");
536 
537  RCP<const CrsMatrix> crsMat = crsOp->getCrsMatrix();
540  if(!tmp_Crs.is_null()) {
541  return tmp_Crs->getTpetra_CrsMatrixNonConst();
542  }
543  else {
544  tmp_BlockCrs= rcp_dynamic_cast<const Xpetra::TpetraBlockCrsMatrix<Scalar,LocalOrdinal,GlobalOrdinal,Node> >(crsMat);
545  if (tmp_BlockCrs.is_null())
546  throw Exceptions::BadCast("Cast from Xpetra::CrsMatrix to Xpetra::TpetraCrsMatrix and Xpetra::TpetraBlockCrsMatrix failed");
547  return tmp_BlockCrs->getTpetra_BlockCrsMatrixNonConst();
548  }
549 #endif
550  };
551 
552 
554 #if ((defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_OPENMP) || !defined(HAVE_TPETRA_INST_INT_INT))) || \
555  (!defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_SERIAL) || !defined(HAVE_TPETRA_INST_INT_INT))))
556  throw Exceptions::RuntimeError("Map2TpetraMap: Tpetra has not been compiled with support for LO=GO=int.");
557 #else
559  if (tmp_TMap == Teuchos::null)
560  throw Exceptions::BadCast("Utilities::Map2TpetraMap : Cast from Xpetra::Map to Xpetra::TpetraMap failed");
561  return tmp_TMap->getTpetra_Map();
562 #endif
563  };
564 #endif
565 
580  static Teuchos::ArrayRCP<const bool> DetectDirichletRows(const Matrix& A, const Magnitude& tol = Teuchos::ScalarTraits<Scalar>::zero(), const bool count_twos_as_dirichlet=false) { return MueLu::UtilitiesBase<Scalar,LocalOrdinal,GlobalOrdinal,Node>::DetectDirichletRows(A,tol,count_twos_as_dirichlet); }
583 
584  static Scalar PowerMethod(const Matrix& A, bool scaleByDiag = true,
585  LocalOrdinal niters = 10, Magnitude tolerance = 1e-2, bool verbose = false, unsigned int seed = 123) {
587  }
588 
591  }
592 
593  static void MyOldScaleMatrix(Matrix& Op, const Teuchos::ArrayRCP<const Scalar>& scalingVector, bool doInverse = true,
594  bool doFillComplete = true, bool doOptimizeStorage = true) {
596  Teuchos::ArrayRCP<Scalar> sv(scalingVector.size());
597  if (doInverse) {
598  for (int i = 0; i < scalingVector.size(); ++i)
599  sv[i] = one / scalingVector[i];
600  } else {
601  for (int i = 0; i < scalingVector.size(); ++i)
602  sv[i] = scalingVector[i];
603  }
604 
605  switch (Op.getRowMap()->lib()) {
606  case Xpetra::UseTpetra:
607  MyOldScaleMatrix_Tpetra(Op, sv, doFillComplete, doOptimizeStorage);
608  break;
609 
610  case Xpetra::UseEpetra:
611  MyOldScaleMatrix_Epetra(Op, sv, doFillComplete, doOptimizeStorage);
612  break;
613 
614  default:
615  throw Exceptions::RuntimeError("Only Epetra and Tpetra matrices can be scaled.");
616  }
617  }
618 
619  // TODO This is the <double,int,int> specialization
620  static void MyOldScaleMatrix_Tpetra(Matrix& Op, const Teuchos::ArrayRCP<Scalar>& scalingVector,
621  bool doFillComplete, bool doOptimizeStorage) {
622 #ifdef HAVE_MUELU_TPETRA
623 #if ((defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_OPENMP) || !defined(HAVE_TPETRA_INST_INT_INT))) || \
624  (!defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_SERIAL) || !defined(HAVE_TPETRA_INST_INT_INT))))
625  throw Exceptions::RuntimeError("Matrix scaling is not possible because Tpetra has not been compiled with support for LO=GO=int.");
626 #else
627  try {
629 
633 
634  size_t maxRowSize = tpOp.getNodeMaxNumRowEntries();
635  if (maxRowSize == Teuchos::as<size_t>(-1)) // hasn't been determined yet
636  maxRowSize = 20;
637 
638  std::vector<Scalar> scaledVals(maxRowSize);
639  if (tpOp.isFillComplete())
640  tpOp.resumeFill();
641 
642  if (Op.isLocallyIndexed() == true) {
645 
646  for (size_t i = 0; i < rowMap->getNodeNumElements(); ++i) {
647  tpOp.getLocalRowView(i, cols, vals);
648  size_t nnz = tpOp.getNumEntriesInLocalRow(i);
649  if (nnz > maxRowSize) {
650  maxRowSize = nnz;
651  scaledVals.resize(maxRowSize);
652  }
653  for (size_t j = 0; j < nnz; ++j)
654  scaledVals[j] = vals[j]*scalingVector[i];
655 
656  if (nnz > 0) {
657  Teuchos::ArrayView<const Scalar> valview(&scaledVals[0], nnz);
658  tpOp.replaceLocalValues(i, cols, valview);
659  }
660  } //for (size_t i=0; ...
661 
662  } else {
665 
666  for (size_t i = 0; i < rowMap->getNodeNumElements(); ++i) {
667  GlobalOrdinal gid = rowMap->getGlobalElement(i);
668  tpOp.getGlobalRowView(gid, cols, vals);
669  size_t nnz = tpOp.getNumEntriesInGlobalRow(gid);
670  if (nnz > maxRowSize) {
671  maxRowSize = nnz;
672  scaledVals.resize(maxRowSize);
673  }
674  // FIXME FIXME FIXME FIXME FIXME FIXME
675  for (size_t j = 0; j < nnz; ++j)
676  scaledVals[j] = vals[j]*scalingVector[i]; //FIXME i or gid?
677 
678  if (nnz > 0) {
679  Teuchos::ArrayView<const Scalar> valview(&scaledVals[0], nnz);
680  tpOp.replaceGlobalValues(gid, cols, valview);
681  }
682  } //for (size_t i=0; ...
683  }
684 
685  if (doFillComplete) {
686  if (domainMap == Teuchos::null || rangeMap == Teuchos::null)
687  throw Exceptions::RuntimeError("In Utilities::Scaling: cannot fillComplete because the domain and/or range map hasn't been defined");
688 
690  params->set("Optimize Storage", doOptimizeStorage);
691  params->set("No Nonlocal Changes", true);
692  Op.fillComplete(Op.getDomainMap(), Op.getRangeMap(), params);
693  }
694  } catch(...) {
695  throw Exceptions::RuntimeError("Only Tpetra::CrsMatrix types can be scaled (Err.1)");
696  }
697 #endif
698 #else
699  throw Exceptions::RuntimeError("Matrix scaling is not possible because Tpetra has not been enabled.");
700 #endif
701  }
702 
703  static void MyOldScaleMatrix_Epetra (Matrix& Op, const Teuchos::ArrayRCP<Scalar>& scalingVector, bool doFillComplete, bool doOptimizeStorage) {
704 #ifdef HAVE_MUELU_EPETRA
705  try {
706  //const Epetra_CrsMatrix& epOp = Utilities<double,int,int>::Op2NonConstEpetraCrs(Op);
707  const Epetra_CrsMatrix& epOp = Op2NonConstEpetraCrs(Op);
708 
709  Epetra_Map const &rowMap = epOp.RowMap();
710  int nnz;
711  double *vals;
712  int *cols;
713 
714  for (int i = 0; i < rowMap.NumMyElements(); ++i) {
715  epOp.ExtractMyRowView(i, nnz, vals, cols);
716  for (int j = 0; j < nnz; ++j)
717  vals[j] *= scalingVector[i];
718  }
719 
720  } catch (...){
721  throw Exceptions::RuntimeError("Only Epetra_CrsMatrix types can be scaled");
722  }
723 #else
724  throw Exceptions::RuntimeError("Matrix scaling is not possible because Epetra has not been enabled.");
725 #endif // HAVE_MUELU_EPETRA
726  }
727 
733  static RCP<Matrix> Transpose(Matrix& Op, bool optimizeTranspose = false,const std::string & label = std::string(),const Teuchos::RCP<Teuchos::ParameterList> &params=Teuchos::null) {
734  switch (Op.getRowMap()->lib()) {
735  case Xpetra::UseTpetra: {
736 #ifdef HAVE_MUELU_TPETRA
737 #if ((defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_OPENMP) || !defined(HAVE_TPETRA_INST_INT_INT))) || \
738  (!defined(EPETRA_HAVE_OMP) && (!defined(HAVE_TPETRA_INST_SERIAL) || !defined(HAVE_TPETRA_INST_INT_INT))))
739  throw Exceptions::RuntimeError("Utilities::Transpose: Tpetra is not compiled with LO=GO=int. Add TPETRA_INST_INT_INT:BOOL=ON to your configuration!");
740 #else
741  try {
743 
744  // Compute the transpose A of the Tpetra matrix tpetraOp.
746  Tpetra::RowMatrixTransposer<Scalar, LocalOrdinal, GlobalOrdinal, Node> transposer(rcpFromRef(tpetraOp),label);
747  A = transposer.createTranspose(params);
749  RCP<CrsMatrix> AAA = rcp_implicit_cast<CrsMatrix>(AA);
750  RCP<Matrix> AAAA = rcp( new CrsMatrixWrap(AAA));
751 
752  if (Op.IsView("stridedMaps"))
753  AAAA->CreateView("stridedMaps", Teuchos::rcpFromRef(Op), true/*doTranspose*/);
754 
755  return AAAA;
756  }
757  catch (std::exception& e) {
758  std::cout << "threw exception '" << e.what() << "'" << std::endl;
759  throw Exceptions::RuntimeError("Utilities::Transpose failed, perhaps because matrix is not a Crs matrix");
760  }
761 #endif
762 #else
763  throw Exceptions::RuntimeError("Utilities::Transpose: Tpetra is not compiled!");
764 #endif
765  }
766  case Xpetra::UseEpetra:
767  {
768 #if defined(HAVE_MUELU_EPETRA) && defined(HAVE_MUELU_EPETRAEXT)
769  Teuchos::TimeMonitor tm(*Teuchos::TimeMonitor::getNewTimer("ZZ Entire Transpose"));
770  // Epetra case
772  EpetraExt::RowMatrix_Transpose transposer;
773  Epetra_CrsMatrix * A = dynamic_cast<Epetra_CrsMatrix*>(&transposer(epetraOp));
774  transposer.ReleaseTranspose(); // So we can keep A in Muelu...
775 
776  RCP<Epetra_CrsMatrix> rcpA(A);
777  RCP<EpetraCrsMatrix> AA = rcp(new EpetraCrsMatrix(rcpA));
778  RCP<CrsMatrix> AAA = rcp_implicit_cast<CrsMatrix>(AA);
779  RCP<Matrix> AAAA = rcp( new CrsMatrixWrap(AAA));
780 
781  if (Op.IsView("stridedMaps"))
782  AAAA->CreateView("stridedMaps", Teuchos::rcpFromRef(Op), true/*doTranspose*/);
783 
784  return AAAA;
785 #else
786  throw Exceptions::RuntimeError("Epetra (Err. 2)");
787 #endif
788  }
789  default:
790  throw Exceptions::RuntimeError("Only Epetra and Tpetra matrices can be transposed.");
791  }
792 
793  TEUCHOS_UNREACHABLE_RETURN(Teuchos::null);
794  }
795 
799  return Xscalar;
800  }
801 
806 
807  // check whether coordinates are contained in parameter list
808  if(paramList.isParameter ("Coordinates") == false)
809  return coordinates;
810 
811  #if defined(HAVE_MUELU_TPETRA)
812  #if ( defined(EPETRA_HAVE_OMP) && defined(HAVE_TPETRA_INST_OPENMP) && defined(HAVE_TPETRA_INST_INT_INT)) || \
813  (!defined(EPETRA_HAVE_OMP) && defined(HAVE_TPETRA_INST_SERIAL) && defined(HAVE_TPETRA_INST_INT_INT))
814 
815  // define Tpetra::MultiVector type with Scalar=float only if
816  // * ETI is turned off, since then the compiler will instantiate it automatically OR
817  // * Tpetra is instantiated on Scalar=float
818  #if !defined(HAVE_TPETRA_EXPLICIT_INSTANTIATION) || defined(HAVE_TPETRA_INST_FLOAT)
820  RCP<tfMV> floatCoords = Teuchos::null;
821  #endif
822 
823  // define Tpetra::MultiVector type with Scalar=double only if
824  // * ETI is turned off, since then the compiler will instantiate it automatically OR
825  // * Tpetra is instantiated on Scalar=double
827  RCP<tdMV> doubleCoords = Teuchos::null;
828  if (paramList.isType<RCP<tdMV> >("Coordinates")) {
829  // Coordinates are stored as a double vector
830  doubleCoords = paramList.get<RCP<tdMV> >("Coordinates");
831  paramList.remove("Coordinates");
832  }
833  #if !defined(HAVE_TPETRA_EXPLICIT_INSTANTIATION) || defined(HAVE_TPETRA_INST_FLOAT)
834  else if (paramList.isType<RCP<tfMV> >("Coordinates")) {
835  // check if coordinates are stored as a float vector
836  floatCoords = paramList.get<RCP<tfMV> >("Coordinates");
837  paramList.remove("Coordinates");
838  doubleCoords = rcp(new tdMV(floatCoords->getMap(), floatCoords->getNumVectors()));
839  deep_copy(*doubleCoords, *floatCoords);
840  }
841  #endif
842  // We have the coordinates in a Tpetra double vector
843  if(doubleCoords != Teuchos::null) {
845  TEUCHOS_TEST_FOR_EXCEPT(doubleCoords->getNumVectors() != coordinates->getNumVectors());
846  }
847  #endif // Tpetra instantiated on GO=int and EpetraNode
848  #endif // endif HAVE_TPETRA
849 
850  #if defined(HAVE_MUELU_EPETRA)
851  RCP<Epetra_MultiVector> doubleEpCoords;
852  if (paramList.isType<RCP<Epetra_MultiVector> >("Coordinates")) {
853  doubleEpCoords = paramList.get<RCP<Epetra_MultiVector> >("Coordinates");
854  paramList.remove("Coordinates");
856  coordinates = rcp_dynamic_cast<Xpetra::MultiVector<double,LocalOrdinal,GlobalOrdinal,Node> >(epCoordinates);
857  TEUCHOS_TEST_FOR_EXCEPT(doubleEpCoords->NumVectors() != Teuchos::as<int>(coordinates->getNumVectors()));
858  }
859  #endif
860 
861  // check for Xpetra coordinates vector
862  if(paramList.isType<decltype(coordinates)>("Coordinates")) {
863  coordinates = paramList.get<decltype(coordinates)>("Coordinates");
864  }
865 
867  return coordinates;
868  }
869 
870  }; // class Utilities (specialization SC=double LO=GO=int)
871 
872 #endif // HAVE_MUELU_EPETRA
873 
874 
875 
881 
882 
886  void TokenizeStringAndStripWhiteSpace(const std::string & stream, std::vector<std::string> & tokenList, const char* token = ",");
887 
890  bool IsParamMuemexVariable(const std::string& name);
891 
894  bool IsParamValidVariable(const std::string& name);
895 
896 #ifdef HAVE_MUELU_EPETRA
897 
901  template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node>
902  RCP<Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
907 
908  RCP<XCrsMatrix> Atmp = rcp(new XECrsMatrix(A));
909  return rcp(new XCrsMatrixWrap(Atmp));
910  }
911 
916  template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node>
917  RCP<Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
920  }
921 #endif
922 
923 #ifdef HAVE_MUELU_TPETRA
924 
928  template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node>
929  RCP<Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
934 
935  RCP<XCrsMatrix> Atmp = rcp(new XTCrsMatrix(Atpetra));
936  return rcp(new XCrsMatrixWrap(Atmp));
937  }
938 
943  template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node>
944  RCP<Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
947  }
948 #endif
949 
951  template<class T>
952  std::string toString(const T& what) {
953  std::ostringstream buf;
954  buf << what;
955  return buf.str();
956  }
957 
958 #ifdef HAVE_MUELU_EPETRA
959 
963  template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node>
964  RCP<Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
966 
971  template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node>
972  RCP<Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
974 #endif
975 
976 #ifdef HAVE_MUELU_TPETRA
977 
981  template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node>
982  RCP<Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
984 
989  template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node>
990  RCP<Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
992 #endif
993 
994 } //namespace MueLu
995 
996 #define MUELU_UTILITIES_SHORT
997 #endif // MUELU_UTILITIES_DECL_HPP
Xpetra::Matrix::CreateView
void CreateView(viewLabel_t viewLabel, const RCP< const Map > &rowMap, const RCP< const Map > &colMap)
MueLu::Utilities::Op2TpetraCrs
static RCP< const Tpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Op2TpetraCrs(RCP< const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Op)
Definition: MueLu_Utilities_def.hpp:250
MueLu_ConfigDefs.hpp
MueLu::TpetraMultiVector_To_XpetraMultiVector
RCP< Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > TpetraMultiVector_To_XpetraMultiVector(const Teuchos::RCP< Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &Vtpetra)
Definition: MueLu_Utilities_decl.hpp:945
MueLu::Utilities::ZeroDirichletRows
static void ZeroDirichletRows(Teuchos::RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &A, const Teuchos::ArrayRCP< const bool > &dirichletRows, Scalar replaceWith=Teuchos::ScalarTraits< Scalar >::zero())
Definition: MueLu_Utilities_decl.hpp:255
MueLu::Utilities::FindDirichletRows
static void FindDirichletRows(Teuchos::RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &A, std::vector< LocalOrdinal > &dirichletRows, bool count_twos_as_dirichlet=false)
Definition: MueLu_Utilities_decl.hpp:238
Teuchos::TimeMonitor::getNewTimer
static RCP< Time > getNewTimer(const std::string &name)
Kokkos::Compat::KokkosSerialWrapperNode
Teuchos_ParameterList.hpp
Xpetra_Map_fwd.hpp
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::Residual
static RCP< MultiVector > Residual(const Xpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Op, const Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, const Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &RHS)
Definition: MueLu_Utilities_decl.hpp:575
MueLu::Utilities::GetLumpedMatrixDiagonal
static Teuchos::ArrayRCP< Scalar > GetLumpedMatrixDiagonal(const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A)
Definition: MueLu_Utilities_decl.hpp:199
Epetra_BlockMap::NumMyElements
int NumMyElements() const
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::Op2NonConstTpetraCrs
static RCP< Tpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Op2NonConstTpetraCrs(RCP< Matrix > Op)
Definition: MueLu_Utilities_decl.hpp:453
Xpetra::TpetraBlockCrsMatrix
MueLu::UtilitiesBase::ZeroDirichletCols
static void ZeroDirichletCols(Teuchos::RCP< Matrix > &A, const Teuchos::ArrayRCP< const bool > &dirichletCols, Scalar replaceWith=Teuchos::ScalarTraits< Scalar >::zero())
Definition: MueLu_UtilitiesBase_decl.hpp:865
MueLu::Utilities::MV2NonConstTpetraMV
static RCP< Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > MV2NonConstTpetraMV(RCP< Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > vec)
Definition: MueLu_Utilities_def.hpp:223
MueLu::Utilities::PauseForDebugger
static void PauseForDebugger()
Definition: MueLu_Utilities_decl.hpp:207
MueLu::Utilities::GetLumpedMatrixDiagonal
static Teuchos::RCP< Xpetra::Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > GetLumpedMatrixDiagonal(Teuchos::RCP< const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > A)
Definition: MueLu_Utilities_decl.hpp:200
TEUCHOS_TEST_FOR_EXCEPT
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
MueLu::toString
std::string toString(const T &what)
Little helper function to convert non-string types to strings.
Definition: MueLu_Utilities_decl.hpp:952
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::Op2NonConstEpetraCrs
static Epetra_CrsMatrix & Op2NonConstEpetraCrs(Matrix &Op)
Definition: MueLu_Utilities_decl.hpp:361
Tpetra::Classes::CrsMatrix::getNodeMaxNumRowEntries
size_t getNodeMaxNumRowEntries() const override
Xpetra_CrsMatrixWrap.hpp
MueLu::ExtractNonSerializableData
long ExtractNonSerializableData(const Teuchos::ParameterList &inList, Teuchos::ParameterList &serialList, Teuchos::ParameterList &nonSerialList)
Definition: MueLu_Utilities.cpp:62
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::MV2NonConstEpetraMV
static Epetra_MultiVector & MV2NonConstEpetraMV(MultiVector &vec)
Definition: MueLu_Utilities_decl.hpp:324
MueLu::Utilities::MakeFancy
static RCP< Teuchos::FancyOStream > MakeFancy(std::ostream &os)
Definition: MueLu_Utilities_decl.hpp:208
MueLu::Utilities::MV2TpetraMV
static RCP< const Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > MV2TpetraMV(RCP< Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > const vec)
Helper utility to pull out the underlying Tpetra objects from an Xpetra object.
Definition: MueLu_Utilities_def.hpp:215
Tpetra::Classes::CrsMatrix::getRowMap
Teuchos::RCP< const map_type > getRowMap() const override
MueLu::UtilitiesBase::Residual
static RCP< MultiVector > Residual(const Xpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Op, const MultiVector &X, const MultiVector &RHS)
Definition: MueLu_UtilitiesBase_decl.hpp:360
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::EpetraMap
Xpetra::EpetraMapT< GlobalOrdinal, Node > EpetraMap
Definition: MueLu_Utilities_decl.hpp:298
Xpetra_ImportFactory.hpp
Xpetra::Operator
MueLu::UtilitiesBase::ZeroDirichletRows
static void ZeroDirichletRows(Teuchos::RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &A, const std::vector< LocalOrdinal > &dirichletRows, Scalar replaceWith=Teuchos::ScalarTraits< Scalar >::zero())
Definition: MueLu_UtilitiesBase_decl.hpp:818
MueLu::Utilities::MyOldScaleMatrix_Epetra
static void MyOldScaleMatrix_Epetra(Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Op, const Teuchos::ArrayRCP< Scalar > &scalingVector, bool doFillComplete, bool doOptimizeStorage)
Definition: MueLu_Utilities_def.hpp:382
Tpetra::Classes::CrsMatrix::getGlobalRowView
void getGlobalRowView(GlobalOrdinal GlobalRow, Teuchos::ArrayView< const GlobalOrdinal > &indices, Teuchos::ArrayView< const Scalar > &values) const override
MueLu::Utilities::ZeroDirichletCols
static void ZeroDirichletCols(Teuchos::RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &A, const Teuchos::ArrayRCP< const bool > &dirichletCols, Scalar replaceWith=Teuchos::ScalarTraits< Scalar >::zero())
Definition: MueLu_Utilities_decl.hpp:263
Xpetra_MultiVector_fwd.hpp
MueLu::Utilities::RealValuedToScalarMultiVector
static RCP< Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > RealValuedToScalarMultiVector(RCP< Xpetra::MultiVector< double, LocalOrdinal, GlobalOrdinal, Node > > X)
Definition: MueLu_Utilities_def.hpp:523
Xpetra::MultiVector
MueLu::UtilitiesBase::ResidualNorm
static Teuchos::Array< Magnitude > ResidualNorm(const Xpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Op, const MultiVector &X, const MultiVector &RHS)
Definition: MueLu_UtilitiesBase_decl.hpp:342
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::Transpose
static RCP< Matrix > Transpose(Matrix &Op, bool optimizeTranspose=false, const std::string &label=std::string(), const Teuchos::RCP< Teuchos::ParameterList > &params=Teuchos::null)
Transpose a Xpetra::Matrix.
Definition: MueLu_Utilities_decl.hpp:733
Xpetra_Import.hpp
MueLu::EpetraMultiVector_To_XpetraMultiVector
RCP< Xpetra::MultiVector< SC, LO, GO, NO > > EpetraMultiVector_To_XpetraMultiVector(const Teuchos::RCP< Epetra_MultiVector > &V)
Definition: MueLu_Utilities_decl.hpp:918
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::Magnitude
Teuchos::ScalarTraits< Scalar >::magnitudeType Magnitude
Definition: MueLu_Utilities_decl.hpp:288
Xpetra::TpetraMultiVector::getTpetra_MultiVector
RCP< Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getTpetra_MultiVector() const
MueLu::UtilitiesBase::Frobenius
static Scalar Frobenius(const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A, const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &B)
Frobenius inner product of two matrices.
Definition: MueLu_UtilitiesBase_decl.hpp:648
Xpetra::Matrix::IsView
bool IsView(const viewLabel_t viewLabel) const
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::Op2EpetraCrs
static RCP< const Epetra_CrsMatrix > Op2EpetraCrs(RCP< const Matrix > Op)
Definition: MueLu_Utilities_decl.hpp:329
MueLu::Utilities::Distance2
static Teuchos::ScalarTraits< Scalar >::magnitudeType Distance2(const Teuchos::Array< Teuchos::ArrayRCP< const Scalar >> &v, LocalOrdinal i0, LocalOrdinal i1)
Definition: MueLu_Utilities_decl.hpp:209
MueLu::Utilities::Map2EpetraMap
static const Epetra_Map & Map2EpetraMap(const Xpetra::Map< LocalOrdinal, GlobalOrdinal, Node > &map)
Definition: MueLu_Utilities_def.hpp:204
MueLu::UtilitiesBase::Crs2Op
static RCP< Matrix > Crs2Op(RCP< CrsMatrix > Op)
Definition: MueLu_UtilitiesBase_decl.hpp:128
Tpetra::Classes::RowMatrixTransposer::createTranspose
Teuchos::RCP< crs_matrix_type > createTranspose(const Teuchos::RCP< Teuchos::ParameterList > &params=Teuchos::null)
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::GetLumpedMatrixDiagonal
static Teuchos::ArrayRCP< Scalar > GetLumpedMatrixDiagonal(const Matrix &A)
Definition: MueLu_Utilities_decl.hpp:569
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::LocalOrdinal
int LocalOrdinal
Definition: MueLu_Utilities_decl.hpp:285
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::EpetraMultiVector
Xpetra::EpetraMultiVectorT< GlobalOrdinal, Node > EpetraMultiVector
Definition: MueLu_Utilities_decl.hpp:299
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::Residual
static void Residual(const Xpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Op, const Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, const Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &RHS, Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Resid)
Definition: MueLu_Utilities_decl.hpp:576
Xpetra_TpetraMultiVector_fwd.hpp
Tpetra::Classes::CrsMatrix::isFillComplete
bool isFillComplete() const override
MueLu::Utilities::MyOldScaleMatrix_Tpetra
static void MyOldScaleMatrix_Tpetra(Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Op, const Teuchos::ArrayRCP< Scalar > &scalingVector, bool doFillComplete, bool doOptimizeStorage)
Definition: MueLu_Utilities_def.hpp:387
Xpetra_BlockedCrsMatrix_fwd.hpp
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::MV2EpetraMV
static RCP< const Epetra_MultiVector > MV2EpetraMV(RCP< MultiVector > const vec)
Helper utility to pull out the underlying Epetra objects from an Xpetra object.
Definition: MueLu_Utilities_decl.hpp:307
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::Crs2Op
static RCP< Matrix > Crs2Op(RCP< CrsMatrix > Op)
Definition: MueLu_Utilities_decl.hpp:566
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::MultiVector
Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > MultiVector
Definition: MueLu_Utilities_decl.hpp:295
MueLu::Utilities
MueLu utility class.
Definition: MueLu_Utilities_fwd.hpp:54
MueLu::Utilities::GetMatrixOverlappedDiagonal
static RCP< Xpetra::Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > GetMatrixOverlappedDiagonal(const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A)
Definition: MueLu_Utilities_decl.hpp:201
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::MV2TpetraMV
static const Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > & MV2TpetraMV(const MultiVector &vec)
Definition: MueLu_Utilities_decl.hpp:419
Teuchos::ParameterList::get
T & get(const std::string &name, T def_value)
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::RealValuedToScalarMultiVector
static RCP< Xpetra::MultiVector< double, LocalOrdinal, GlobalOrdinal, Node > > RealValuedToScalarMultiVector(RCP< Xpetra::MultiVector< double, LocalOrdinal, GlobalOrdinal, Node > > X)
Definition: MueLu_Utilities_decl.hpp:797
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::Matrix
Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > Matrix
Definition: MueLu_Utilities_decl.hpp:293
MueLu::UtilitiesBase::DetectDirichletRows
static Teuchos::ArrayRCP< const bool > DetectDirichletRows(const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A, const Magnitude &tol=Teuchos::ScalarTraits< Scalar >::zero(), bool count_twos_as_dirichlet=false)
Detect Dirichlet rows.
Definition: MueLu_UtilitiesBase_decl.hpp:514
MueLu::Exceptions::BadCast
Exception indicating invalid cast attempted.
Definition: MueLu_Exceptions.hpp:57
MueLu::Utilities::PowerMethod
static Scalar PowerMethod(const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A, bool scaleByDiag=true, LocalOrdinal niters=10, Magnitude tolerance=1e-2, bool verbose=false, unsigned int seed=123)
Definition: MueLu_Utilities_decl.hpp:215
rcp
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Xpetra::UseTpetra
UseTpetra
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::GlobalOrdinal
int GlobalOrdinal
Definition: MueLu_Utilities_decl.hpp:286
Xpetra_TpetraBlockCrsMatrix.hpp
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::MyOldScaleMatrix_Epetra
static void MyOldScaleMatrix_Epetra(Matrix &Op, const Teuchos::ArrayRCP< Scalar > &scalingVector, bool doFillComplete, bool doOptimizeStorage)
Definition: MueLu_Utilities_decl.hpp:703
MueLu::UtilitiesBase::GetMatrixDiagonalInverse
static RCP< Vector > GetMatrixDiagonalInverse(const Matrix &A, Magnitude tol=Teuchos::ScalarTraits< Scalar >::eps() *100)
Extract Matrix Diagonal.
Definition: MueLu_UtilitiesBase_decl.hpp:168
MueLu::Utilities::ApplyOAZToMatrixRows
static void ApplyOAZToMatrixRows(Teuchos::RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &A, const std::vector< LocalOrdinal > &dirichletRows)
Definition: MueLu_Utilities_decl.hpp:243
Teuchos::ParameterList::remove
bool remove(std::string const &name, bool throwIfNotExists=true)
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::Distance2
static Teuchos::ScalarTraits< Scalar >::magnitudeType Distance2(const Teuchos::Array< Teuchos::ArrayRCP< const Scalar >> &v, LocalOrdinal i0, LocalOrdinal i1)
Definition: MueLu_Utilities_decl.hpp:579
Xpetra::Operator::getRangeMap
virtual Teuchos::RCP< const Map > getRangeMap() const=0
MueLu
Namespace for MueLu classes and methods.
Definition: MueLu_BrickAggregationFactory_decl.hpp:76
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::Node
Xpetra::EpetraNode Node
Definition: MueLu_Utilities_decl.hpp:287
MueLu::Utilities::GetInverse
static Teuchos::RCP< Xpetra::Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > GetInverse(Teuchos::RCP< const Xpetra::Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > v, Magnitude tol=Teuchos::ScalarTraits< Scalar >::eps() *100, Scalar tolReplacement=Teuchos::ScalarTraits< Scalar >::zero())
Definition: MueLu_Utilities_decl.hpp:202
MueLu::Utilities::DetectDirichletRows
static Teuchos::ArrayRCP< const bool > DetectDirichletRows(const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A, const Magnitude &tol=Teuchos::ScalarTraits< Scalar >::magnitude(0.), const bool count_twos_as_dirichlet=false)
Definition: MueLu_Utilities_decl.hpp:210
Tpetra::Classes::CrsMatrix::replaceGlobalValues
LocalOrdinal replaceGlobalValues(const GlobalOrdinal globalRow, const typename UnmanagedView< GlobalIndicesViewType >::type &inputInds, const typename UnmanagedView< ImplScalarViewType >::type &inputVals) const
Teuchos::ArrayView
Tpetra::Classes::CrsMatrix::getNumEntriesInGlobalRow
size_t getNumEntriesInGlobalRow(GlobalOrdinal globalRow) const override
Xpetra::Map
MueLu::UtilitiesBase::SetRandomSeed
static void SetRandomSeed(const Teuchos::Comm< int > &comm)
Set seed for random number generator.
Definition: MueLu_UtilitiesBase_decl.hpp:715
Tpetra::Classes::CrsMatrix::getRangeMap
Teuchos::RCP< const map_type > getRangeMap() const override
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::PauseForDebugger
static void PauseForDebugger()
Definition: MueLu_Utilities_decl.hpp:577
Teuchos::RCP
MueLu::Utilities::MV2NonConstEpetraMV
static RCP< Epetra_MultiVector > MV2NonConstEpetraMV(RCP< Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > vec)
Definition: MueLu_Utilities_def.hpp:132
Epetra_CrsMatrix
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::ResidualNorm
static Teuchos::Array< Magnitude > ResidualNorm(const Xpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Op, const Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, const Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &RHS, Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Resid)
Definition: MueLu_Utilities_decl.hpp:574
Tpetra::Classes::CrsMatrix::resumeFill
void resumeFill(const Teuchos::RCP< Teuchos::ParameterList > &params=Teuchos::null)
MueLu::UtilitiesBase::ApplyOAZToMatrixRows
static void ApplyOAZToMatrixRows(Teuchos::RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &A, const std::vector< LocalOrdinal > &dirichletRows)
Definition: MueLu_UtilitiesBase_decl.hpp:764
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::PowerMethod
static Scalar PowerMethod(const Matrix &A, bool scaleByDiag=true, LocalOrdinal niters=10, Magnitude tolerance=1e-2, bool verbose=false, unsigned int seed=123)
Definition: MueLu_Utilities_decl.hpp:584
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::Op2NonConstTpetraRow
static RCP< Tpetra::RowMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Op2NonConstTpetraRow(RCP< Matrix > Op)
Definition: MueLu_Utilities_decl.hpp:528
MueLu::UtilitiesBase::CrsMatrixWrap
Xpetra::CrsMatrixWrap< Scalar, LocalOrdinal, GlobalOrdinal, Node > CrsMatrixWrap
Definition: MueLu_UtilitiesBase_decl.hpp:115
Xpetra::CrsMatrixWrap::getCrsMatrix
RCP< CrsMatrix > getCrsMatrix() const
Teuchos::Array
Xpetra::TpetraCrsMatrix
MueLu::UtilitiesBase::GetMatrixDiagonal
static Teuchos::ArrayRCP< Scalar > GetMatrixDiagonal(const Matrix &A)
Extract Matrix Diagonal.
Definition: MueLu_UtilitiesBase_decl.hpp:140
MueLu::Utilities::Residual
static RCP< Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Residual(const Xpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Op, const Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, const Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &RHS)
Definition: MueLu_Utilities_decl.hpp:205
Teuchos::ParameterList::set
ParameterList & set(std::string const &name, T const &value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
Xpetra::Matrix
Tpetra::Classes::CrsMatrix::getDomainMap
Teuchos::RCP< const map_type > getDomainMap() const override
tolerance
magnitude_type tolerance
Xpetra_MatrixFactory_fwd.hpp
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::EpetraCrsMatrix
Xpetra::EpetraCrsMatrixT< GlobalOrdinal, Node > EpetraCrsMatrix
Definition: MueLu_Utilities_decl.hpp:300
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::CrsMatrixWrap
Xpetra::CrsMatrixWrap< Scalar, LocalOrdinal, GlobalOrdinal, Node > CrsMatrixWrap
Definition: MueLu_Utilities_decl.hpp:291
MueLu::Utilities::MV2EpetraMV
static RCP< const Epetra_MultiVector > MV2EpetraMV(RCP< Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > const vec)
Helper utility to pull out the underlying Epetra objects from an Xpetra object.
Definition: MueLu_Utilities_def.hpp:124
Teuchos::ParameterList::isType
bool isType(const std::string &name) const
Xpetra::Operator::getDomainMap
virtual Teuchos::RCP< const Map > getDomainMap() const=0
Xpetra::Vector
Tpetra::Classes::CrsMatrix
Xpetra::Matrix::isLocallyIndexed
virtual bool isLocallyIndexed() const=0
Teuchos::ArrayRCP
Teuchos::TimeMonitor
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::Map2EpetraMap
static const Epetra_Map & Map2EpetraMap(const Map &map)
Definition: MueLu_Utilities_decl.hpp:375
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::MyOldScaleMatrix_Tpetra
static void MyOldScaleMatrix_Tpetra(Matrix &Op, const Teuchos::ArrayRCP< Scalar > &scalingVector, bool doFillComplete, bool doOptimizeStorage)
Definition: MueLu_Utilities_decl.hpp:620
MueLu::Utilities::Op2EpetraCrs
static RCP< const Epetra_CrsMatrix > Op2EpetraCrs(RCP< const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Op)
Definition: MueLu_Utilities_def.hpp:152
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::MV2NonConstTpetraMV
static RCP< Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > MV2NonConstTpetraMV(RCP< MultiVector > vec)
Definition: MueLu_Utilities_decl.hpp:397
MueLu::Utilities::ResidualNorm
static Teuchos::Array< Magnitude > ResidualNorm(const Xpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Op, const Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, const Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &RHS, Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Resid)
Definition: MueLu_Utilities_decl.hpp:204
Xpetra::TpetraMultiVector
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::Scalar
double Scalar
Definition: MueLu_Utilities_decl.hpp:284
MueLu::Utilities::Op2NonConstTpetraCrs
static RCP< Tpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Op2NonConstTpetraCrs(RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Op)
Definition: MueLu_Utilities_def.hpp:262
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::MV2NonConstTpetraMV2
static RCP< Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > MV2NonConstTpetraMV2(MultiVector &vec)
Definition: MueLu_Utilities_decl.hpp:409
Teuchos::ScalarTraits::one
static T one()
MueLu::UtilitiesBase
Definition: MueLu_UtilitiesBase_fwd.hpp:54
MueLu::UtilitiesBase::MakeFancy
static RCP< Teuchos::FancyOStream > MakeFancy(std::ostream &os)
Definition: MueLu_UtilitiesBase_decl.hpp:483
MueLu::Utilities::ZeroDirichletRows
static void ZeroDirichletRows(Teuchos::RCP< Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &X, const Teuchos::ArrayRCP< const bool > &dirichletRows, Scalar replaceWith=Teuchos::ScalarTraits< Scalar >::zero())
Definition: MueLu_Utilities_decl.hpp:259
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::Map2TpetraMap
static const RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > Map2TpetraMap(const Map &map)
Definition: MueLu_Utilities_decl.hpp:553
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::Vector
Xpetra::Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > Vector
Definition: MueLu_Utilities_decl.hpp:294
Epetra_CrsMatrix::ExtractMyRowView
int ExtractMyRowView(int MyRow, int &NumEntries, double *&Values, int *&Indices) const
MueLu::Utilities::ResidualNorm
static Teuchos::Array< Magnitude > ResidualNorm(const Xpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Op, const Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, const Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &RHS)
Definition: MueLu_Utilities_decl.hpp:203
Xpetra::TpetraMap
MueLu::Utilities::GetMatrixDiagonal
static Teuchos::ArrayRCP< Scalar > GetMatrixDiagonal(const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A)
Definition: MueLu_Utilities_decl.hpp:197
MueLu::UtilitiesBase::GetInverse
static Teuchos::RCP< Vector > GetInverse(Teuchos::RCP< const Vector > v, Magnitude tol=Teuchos::ScalarTraits< Scalar >::eps() *100, Scalar tolReplacement=Teuchos::ScalarTraits< Scalar >::zero())
Return vector containing inverse of input vector.
Definition: MueLu_UtilitiesBase_decl.hpp:264
MueLu::UtilitiesBase::FindDirichletRows
static void FindDirichletRows(Teuchos::RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &A, std::vector< LocalOrdinal > &dirichletRows, bool count_twos_as_dirichlet=false)
Definition: MueLu_UtilitiesBase_decl.hpp:742
Teuchos::ParameterList::isParameter
bool isParameter(const std::string &name) const
MueLu_Exceptions.hpp
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::MyOldScaleMatrix
static void MyOldScaleMatrix(Matrix &Op, const Teuchos::ArrayRCP< const Scalar > &scalingVector, bool doInverse=true, bool doFillComplete=true, bool doOptimizeStorage=true)
Definition: MueLu_Utilities_decl.hpp:593
Xpetra::TpetraCrsMatrix::getTpetra_CrsMatrixNonConst
RCP< Tpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getTpetra_CrsMatrixNonConst() const
Teuchos::ScalarTraits
MueLu::Exceptions::RuntimeError
Exception throws to report errors in the internal logical of the program.
Definition: MueLu_Exceptions.hpp:70
Tpetra::Classes::RowMatrixTransposer
MueLu::Utilities::Residual
static void Residual(const Xpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Op, const Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, const Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &RHS, Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Resid)
Definition: MueLu_Utilities_decl.hpp:206
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::CrsMatrix
Xpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > CrsMatrix
Definition: MueLu_Utilities_decl.hpp:292
MueLu::UtilitiesBase::GetMatrixOverlappedDiagonal
static RCP< Vector > GetMatrixOverlappedDiagonal(const Matrix &A)
Extract Overlapped Matrix Diagonal.
Definition: MueLu_UtilitiesBase_decl.hpp:302
Xpetra_CrsMatrix_fwd.hpp
Xpetra_EpetraCrsMatrix.hpp
Xpetra_Operator_fwd.hpp
MueLu::Utilities::Op2TpetraRow
static RCP< const Tpetra::RowMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Op2TpetraRow(RCP< const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Op)
Definition: MueLu_Utilities_def.hpp:303
MueLu::Utilities::MyOldScaleMatrix
static void MyOldScaleMatrix(Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Op, const Teuchos::ArrayRCP< const Scalar > &scalingVector, bool doInverse=true, bool doFillComplete=true, bool doOptimizeStorage=true)
Definition: MueLu_Utilities_def.hpp:353
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::Op2TpetraRow
static RCP< const Tpetra::RowMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Op2TpetraRow(RCP< const Matrix > Op)
Definition: MueLu_Utilities_decl.hpp:505
Xpetra::Map::lib
virtual UnderlyingLib lib() const=0
MueLu::UtilitiesBase::PowerMethod
static Scalar PowerMethod(const Matrix &A, bool scaleByDiag=true, LocalOrdinal niters=10, Magnitude tolerance=1e-2, bool verbose=false, unsigned int seed=123)
Simple transpose for Tpetra::CrsMatrix types.
Definition: MueLu_UtilitiesBase_decl.hpp:425
Teuchos::ArrayRCP::size
size_type size() const
Epetra_Vector
MueLu::Utilities::Frobenius
static Scalar Frobenius(const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A, const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &B)
Definition: MueLu_Utilities_decl.hpp:220
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::Op2EpetraCrs
static const Epetra_CrsMatrix & Op2EpetraCrs(const Matrix &Op)
Definition: MueLu_Utilities_decl.hpp:348
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::DetectDirichletRows
static Teuchos::ArrayRCP< const bool > DetectDirichletRows(const Matrix &A, const Magnitude &tol=Teuchos::ScalarTraits< Scalar >::zero(), const bool count_twos_as_dirichlet=false)
Definition: MueLu_Utilities_decl.hpp:580
MueLu::Utilities::DetectDirichletRowsExt
static Teuchos::ArrayRCP< const bool > DetectDirichletRowsExt(const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A, bool &bHasZeroDiagonal, const Magnitude &tol=Teuchos::ScalarTraits< Scalar >::zero())
Definition: MueLu_Utilities_decl.hpp:211
MueLu::Utilities::MV2NonConstTpetraMV2
static RCP< Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > MV2NonConstTpetraMV2(Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &vec)
Definition: MueLu_Utilities_def.hpp:237
Tpetra::Classes::MultiVector
Xpetra_MapFactory_fwd.hpp
Teuchos::RCP::is_null
bool is_null() const
Xpetra::CrsMatrixWrap
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::GetMatrixOverlappedDiagonal
static RCP< Vector > GetMatrixOverlappedDiagonal(const Matrix &A)
Definition: MueLu_Utilities_decl.hpp:571
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::MakeFancy
static RCP< Teuchos::FancyOStream > MakeFancy(std::ostream &os)
Definition: MueLu_Utilities_decl.hpp:578
MueLu::Utilities::Magnitude
Teuchos::ScalarTraits< Scalar >::magnitudeType Magnitude
Definition: MueLu_Utilities_decl.hpp:153
MueLu::Utilities::Transpose
static RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Transpose(Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Op, bool optimizeTranspose=false, const std::string &label=std::string(), const Teuchos::RCP< Teuchos::ParameterList > &params=Teuchos::null)
Definition: MueLu_Utilities_def.hpp:470
Xpetra::Matrix::getRowMap
virtual const RCP< const Map > & getRowMap() const
Xpetra_EpetraCrsMatrix_fwd.hpp
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::Op2TpetraCrs
static RCP< const Tpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Op2TpetraCrs(RCP< const Matrix > Op)
Definition: MueLu_Utilities_decl.hpp:438
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::GetLumpedMatrixDiagonal
static Teuchos::RCP< Xpetra::Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > GetLumpedMatrixDiagonal(Teuchos::RCP< const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > A)
Definition: MueLu_Utilities_decl.hpp:570
Xpetra::EpetraCrsMatrixT::getEpetra_CrsMatrix
RCP< const Epetra_CrsMatrix > getEpetra_CrsMatrix() const
Xpetra_Vector_fwd.hpp
Tpetra::Classes::CrsMatrix::getNumEntriesInLocalRow
size_t getNumEntriesInLocalRow(LocalOrdinal localRow) const override
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::GetMatrixDiagonalInverse
static RCP< Vector > GetMatrixDiagonalInverse(const Matrix &A, Magnitude tol=Teuchos::ScalarTraits< Scalar >::eps() *100)
Definition: MueLu_Utilities_decl.hpp:568
Xpetra::EpetraMapT
Epetra_MultiVector
Xpetra::EpetraMultiVectorT::getEpetra_MultiVector
RCP< Epetra_MultiVector > getEpetra_MultiVector() const
MueLu::Utilities::Op2NonConstEpetraCrs
static RCP< Epetra_CrsMatrix > Op2NonConstEpetraCrs(RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Op)
Definition: MueLu_Utilities_def.hpp:163
MueLu::Utilities::ZeroDirichletRows
static void ZeroDirichletRows(Teuchos::RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &A, const std::vector< LocalOrdinal > &dirichletRows, Scalar replaceWith=Teuchos::ScalarTraits< Scalar >::zero())
Definition: MueLu_Utilities_decl.hpp:251
MueLu::UtilitiesBase::PauseForDebugger
static void PauseForDebugger()
Definition: MueLu_UtilitiesBase_decl.hpp:383
MueLu::TokenizeStringAndStripWhiteSpace
void TokenizeStringAndStripWhiteSpace(const std::string &stream, std::vector< std::string > &tokenList, const char *delimChars)
Definition: MueLu_Utilities.cpp:114
MueLu::Utilities::SetRandomSeed
static void SetRandomSeed(const Teuchos::Comm< int > &comm)
Definition: MueLu_Utilities_decl.hpp:213
Xpetra::UseEpetra
UseEpetra
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::Map
Xpetra::Map< LocalOrdinal, GlobalOrdinal, Node > Map
Definition: MueLu_Utilities_decl.hpp:296
Xpetra_TpetraCrsMatrix_fwd.hpp
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::Frobenius
static Scalar Frobenius(const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A, const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &B)
Definition: MueLu_Utilities_decl.hpp:589
MueLu::Utilities::Op2NonConstTpetraRow
static RCP< Tpetra::RowMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Op2NonConstTpetraRow(RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Op)
Definition: MueLu_Utilities_def.hpp:323
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::MV2EpetraMV
static const Epetra_MultiVector & MV2EpetraMV(const MultiVector &vec)
Definition: MueLu_Utilities_decl.hpp:320
MueLu::Utilities::ExtractCoordinatesFromParameterList
static RCP< Xpetra::MultiVector< double, LocalOrdinal, GlobalOrdinal, Node > > ExtractCoordinatesFromParameterList(ParameterList &paramList)
Definition: MueLu_Utilities_def.hpp:546
Xpetra_VectorFactory_fwd.hpp
MueLu::UtilitiesBase::GetLumpedMatrixDiagonal
static Teuchos::ArrayRCP< Scalar > GetLumpedMatrixDiagonal(const Matrix &A)
Extract Matrix Diagonal of lumped matrix.
Definition: MueLu_UtilitiesBase_decl.hpp:190
MueLu::Utilities::Crs2Op
static RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Crs2Op(RCP< Xpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Op)
Definition: MueLu_Utilities_decl.hpp:196
MueLu::IsParamValidVariable
bool IsParamValidVariable(const std::string &name)
Definition: MueLu_Utilities.cpp:197
MueLu::Utilities::GetMatrixDiagonalInverse
static RCP< Xpetra::Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > GetMatrixDiagonalInverse(const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A, Magnitude tol=Teuchos::ScalarTraits< Scalar >::eps() *100)
Definition: MueLu_Utilities_decl.hpp:198
MueLu::EpetraCrs_To_XpetraMatrix
RCP< Xpetra::Matrix< SC, LO, GO, NO > > EpetraCrs_To_XpetraMatrix(const Teuchos::RCP< Epetra_CrsMatrix > &A)
Definition: MueLu_Utilities_decl.hpp:903
Teuchos::ParameterList
Epetra_CrsMatrix::RowMap
const Epetra_Map & RowMap() const
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::MV2NonConstTpetraMV
static Tpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > & MV2NonConstTpetraMV(MultiVector &vec)
Definition: MueLu_Utilities_decl.hpp:428
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::ExtractCoordinatesFromParameterList
static RCP< Xpetra::MultiVector< double, LocalOrdinal, GlobalOrdinal, Node > > ExtractCoordinatesFromParameterList(ParameterList &paramList)
Extract coordinates from parameter list and return them in a Xpetra::MultiVector.
Definition: MueLu_Utilities_decl.hpp:804
Teuchos::ScalarTraits::magnitudeType
T magnitudeType
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::Op2NonConstTpetraCrs
static Tpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > & Op2NonConstTpetraCrs(Matrix &Op)
Definition: MueLu_Utilities_decl.hpp:486
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::Op2NonConstEpetraCrs
static RCP< Epetra_CrsMatrix > Op2NonConstEpetraCrs(RCP< Matrix > Op)
Definition: MueLu_Utilities_decl.hpp:338
Teuchos::Comm
Definition: MueLu_Memory.hpp:52
Teuchos_ScalarTraits.hpp
Xpetra::EpetraCrsMatrixT
Xpetra_MultiVectorFactory_fwd.hpp
Xpetra_Matrix_fwd.hpp
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::ResidualNorm
static Teuchos::Array< Magnitude > ResidualNorm(const Xpetra::Operator< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Op, const Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, const Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &RHS)
Definition: MueLu_Utilities_decl.hpp:573
MueLu::UtilitiesBase::Distance2
static Teuchos::ScalarTraits< Scalar >::magnitudeType Distance2(const Teuchos::Array< Teuchos::ArrayRCP< const Scalar >> &v, LocalOrdinal i0, LocalOrdinal i1)
Squared distance between two rows in a multivector.
Definition: MueLu_UtilitiesBase_decl.hpp:492
deep_copy
void deep_copy(MultiVector< DS, DL, DG, DN > &dst, const MultiVector< SS, SL, SG, SN > &src)
MueLu::IsParamMuemexVariable
bool IsParamMuemexVariable(const std::string &name)
Definition: MueLu_Utilities.cpp:147
Xpetra_CrsMatrixWrap_fwd.hpp
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::MV2NonConstEpetraMV
static RCP< Epetra_MultiVector > MV2NonConstEpetraMV(RCP< MultiVector > vec)
Definition: MueLu_Utilities_decl.hpp:313
MueLu::Utilities::Map2TpetraMap
static const RCP< const Tpetra::Map< LocalOrdinal, GlobalOrdinal, Node > > Map2TpetraMap(const Xpetra::Map< LocalOrdinal, GlobalOrdinal, Node > &map)
Definition: MueLu_Utilities_def.hpp:344
MueLu::UtilitiesBase::DetectDirichletRowsExt
static Teuchos::ArrayRCP< const bool > DetectDirichletRowsExt(const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A, bool &bHasZeroDiagonal, const Magnitude &tol=Teuchos::ScalarTraits< Scalar >::zero())
Detect Dirichlet rows (extended version)
Definition: MueLu_UtilitiesBase_decl.hpp:566
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::GetMatrixDiagonal
static Teuchos::ArrayRCP< Scalar > GetMatrixDiagonal(const Matrix &A)
Definition: MueLu_Utilities_decl.hpp:567
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::Op2TpetraCrs
static const Tpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > & Op2TpetraCrs(const Matrix &Op)
Definition: MueLu_Utilities_decl.hpp:468
MueLu::TpetraCrs_To_XpetraMultiVector
RCP< Xpetra::MultiVector< SC, LO, GO, NO > > TpetraCrs_To_XpetraMultiVector(const Teuchos::RCP< Tpetra::MultiVector< SC, LO, GO, NO > > &Vtpetra)
Epetra_Map
MueLu::Convert_Epetra_CrsMatrix_ToXpetra_CrsMatrixWrap
RCP< Xpetra::CrsMatrixWrap< SC, LO, GO, NO > > Convert_Epetra_CrsMatrix_ToXpetra_CrsMatrixWrap(RCP< Epetra_CrsMatrix > &epAB)
Definition: MueLu_Utilities_def.hpp:117
MueLu::Utilities::ApplyOAZToMatrixRows
static void ApplyOAZToMatrixRows(Teuchos::RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &A, const Teuchos::ArrayRCP< const bool > &dirichletRows)
Definition: MueLu_Utilities_decl.hpp:247
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::GetInverse
static RCP< Vector > GetInverse(Teuchos::RCP< const Vector > v, Magnitude tol=Teuchos::ScalarTraits< Scalar >::eps() *100, Scalar tolReplacement=Teuchos::ScalarTraits< Scalar >::zero())
Definition: MueLu_Utilities_decl.hpp:572
Tpetra::Classes::CrsMatrix::replaceLocalValues
LocalOrdinal replaceLocalValues(const LocalOrdinal localRow, const typename UnmanagedView< LocalIndicesViewType >::type &inputInds, const typename UnmanagedView< ImplScalarViewType >::type &inputVals) const
Xpetra::EpetraCrsMatrixT::getEpetra_CrsMatrixNonConst
RCP< Epetra_CrsMatrix > getEpetra_CrsMatrixNonConst() const
Xpetra_MatrixMatrix.hpp
Teuchos::is_null
bool is_null(const std::shared_ptr< T > &p)
Xpetra::Matrix::fillComplete
virtual void fillComplete(const RCP< const Map > &domainMap, const RCP< const Map > &rangeMap, const RCP< ParameterList > &params=null)=0
MueLu::TpetraCrs_To_XpetraMatrix
RCP< Xpetra::Matrix< SC, LO, GO, NO > > TpetraCrs_To_XpetraMatrix(const Teuchos::RCP< Tpetra::CrsMatrix< SC, LO, GO, NO > > &Atpetra)
Definition: MueLu_Utilities_decl.hpp:930
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::DetectDirichletRowsExt
static Teuchos::ArrayRCP< const bool > DetectDirichletRowsExt(const Matrix &A, bool &bHasZeroDiagonal, const Magnitude &tol=Teuchos::ScalarTraits< Scalar >::zero())
Definition: MueLu_Utilities_decl.hpp:581
Epetra_MultiVector::NumVectors
int NumVectors() const
Xpetra::EpetraMultiVectorT
Xpetra::CrsMatrix
Xpetra::TpetraCrsMatrix::getTpetra_CrsMatrix
RCP< const Tpetra::CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > getTpetra_CrsMatrix() const
MueLu::Utilities< double, int, int, Xpetra::EpetraNode >::SetRandomSeed
static void SetRandomSeed(const Teuchos::Comm< int > &comm)
Definition: MueLu_Utilities_decl.hpp:582
Tpetra::Classes::CrsMatrix::getLocalRowView
void getLocalRowView(LocalOrdinal LocalRow, Teuchos::ArrayView< const LocalOrdinal > &indices, Teuchos::ArrayView< const Scalar > &values) const override
Xpetra_ExportFactory.hpp
TEUCHOS_UNREACHABLE_RETURN
#define TEUCHOS_UNREACHABLE_RETURN(dummyReturnVal)