53#ifndef MUELU_PERMUTATIONFACTORY_DEF_HPP_
54#define MUELU_PERMUTATIONFACTORY_DEF_HPP_
61#include <Xpetra_Map.hpp>
62#include <Xpetra_StridedMap.hpp>
63#include <Xpetra_Vector.hpp>
64#include <Xpetra_VectorFactory.hpp>
65#include <Xpetra_Matrix.hpp>
66#include <Xpetra_CrsMatrixWrap.hpp>
67#include <Xpetra_Export.hpp>
68#include <Xpetra_ExportFactory.hpp>
69#include <Xpetra_Import.hpp>
70#include <Xpetra_ImportFactory.hpp>
75#include "MueLu_AlgebraicPermutationStrategy.hpp"
76#include "MueLu_LocalPermutationStrategy.hpp"
81template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
85template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
88template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
90 RCP<ParameterList> validParamList = rcp(
new ParameterList());
92 validParamList->set< RCP<const FactoryBase> >(
"A", Teuchos::null,
"Generating factory of the matrix A to be permuted.");
94 validParamList->set< std::string > (
"PermutationRowMapName",
"",
"Name of input row map for which rows the permutation shall be done. (default='')");
95 validParamList->set< RCP<const FactoryBase> >(
"PermutationRowMapFactory", Teuchos::null,
"Generating factory of the input row map for the permutation.");
97 validParamList->set< std::string > (
"PermutationStrategy",
"Algebraic",
"Permutation strategy (default = 'Algebraic', 'Local'");
99 return validParamList;
102template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
104 Input(currentLevel,
"A");
107 std::string mapName = pL.get<std::string> (
"PermutationRowMapName");
108 Teuchos::RCP<const FactoryBase> mapFactory =
GetFactory (
"PermutationRowMapFactory");
110 if(mapName.length() > 0 ) {
111 currentLevel.
DeclareInput(mapName,mapFactory.get(),
this);
115template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
122 std::string mapName = pL.get<std::string> (
"PermutationRowMapName");
123 Teuchos::RCP<const FactoryBase> mapFactory =
GetFactory (
"PermutationRowMapFactory");
125 Teuchos::RCP<const Map> permRowMap = Teuchos::null;
126 if(mapName.length() > 0 ) {
127 permRowMap = currentLevel.
Get<RCP<const Map> >(mapName,mapFactory.get());
129 permRowMap = A->getRowMap();
132 std::string strStrategy = pL.get<std::string> (
"PermutationStrategy");
133 if( strStrategy ==
"Algebraic" ) {
135 permStrat->BuildPermutation(A,permRowMap,currentLevel,
this);
136 }
else if( strStrategy ==
"Local" ) {
138 permStrat->BuildPermutation(A,permRowMap,currentLevel,
this);
140 TEUCHOS_TEST_FOR_EXCEPTION(
true,
142 "`PermutationStrategy' has incorrect value (" << strStrategy <<
") in input to PermutationFactory."
143 <<
"Check the documentation for a list of valid choices");
145 GetOStream(
Runtime0) <<
"Using " << strStrategy <<
" permutation strategy." << std::endl;
Timer to be used in factories. Similar to Monitor but with additional timers.
void Input(Level &level, const std::string &varName) const
T Get(Level &level, const std::string &varName) const
const RCP< const FactoryBase > GetFactory(const std::string &varName) const
Default implementation of FactoryAcceptor::GetFactory().
Class that holds all level-specific information.
void DeclareInput(const std::string &ename, const FactoryBase *factory, const FactoryBase *requestedBy=NoFactory::get())
Callback from FactoryBase::CallDeclareInput() and FactoryBase::DeclareInput().
T & Get(const std::string &ename, const FactoryBase *factory=NoFactory::get())
Get data without decrementing associated storage counter (i.e., read-only access)....
virtual const Teuchos::ParameterList & GetParameterList() const
PermutationFactory()
Constructor.
MueLu::LocalPermutationStrategy< Scalar, LocalOrdinal, GlobalOrdinal, Node > LocalPermutationStrategy
RCP< const ParameterList > GetValidParameterList() const
Return a const parameter list of valid parameters that setParameterList() will accept.
void DeclareInput(Level ¤tLevel) const
Specifies the data that this class needs, and the factories that generate that data.
MueLu::AlgebraicPermutationStrategy< Scalar, LocalOrdinal, GlobalOrdinal, Node > AlgebraicPermutationStrategy
void Build(Level ¤tLevel) const
Build an object with this factory.
virtual ~PermutationFactory()
Destructor.
Teuchos::FancyOStream & GetOStream(MsgType type, int thisProcRankOnly=0) const
Get an output stream for outputting the input message type.
Namespace for MueLu classes and methods.
@ Runtime0
One-liner description of what is happening.