Go to the documentation of this file.
46 #ifndef MUELU_TOGGLECOORDINATESTRANSFER_FACTORY_DEF_HPP
47 #define MUELU_TOGGLECOORDINATESTRANSFER_FACTORY_DEF_HPP
57 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
61 validParamList->
set<
RCP<const FactoryBase> >(
"Chosen P", Teuchos::null,
"Name of TogglePFactory this ToggleCoordinatesTransferFactory is connected to. Parameter provides information which execution path (prolongator) has been chosen.");
63 return validParamList;
66 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
69 TEUCHOS_TEST_FOR_EXCEPTION(!pL.
isParameter(
"Chosen P"),
Exceptions::RuntimeError,
"MueLu::ToggleCoordinatesTransferFactory::DeclareInput: You have to set the 'Chosen P' parameter to a factory name of type TogglePFactory. The ToggleCoordinatesTransferFactory must be used together with a TogglePFactory!");
70 Input(coarseLevel,
"Chosen P");
71 for (std::vector<
RCP<const FactoryBase> >::const_iterator it = coordFacts_.begin(); it != coordFacts_.end(); ++it) {
72 coarseLevel.
DeclareInput(
"Coordinates", (*it).get(),
this);
73 (*it)->CallDeclareInput(coarseLevel);
75 hasDeclaredInput_ =
true;
78 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
80 FactoryMonitor m(*
this,
"Coordinate transfer toggle", coarseLevel);
86 int chosenP = Get< int > (coarseLevel,
"Chosen P");
87 GetOStream(
Runtime1) <<
"Transfer Coordinates" << chosenP <<
" to coarse level" << std::endl;
89 Set(coarseLevel,
"Coordinates", coarseCoords);
106 for(
size_t t=0; t<coordFacts_.size(); ++t) {
107 coarseLevel.
Release(*(coordFacts_[t]));
113 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
117 "MueLu::ToggleCoordinatesTransferFactory::AddCoordTransferFactory: Transfer factory is not derived from TwoLevelFactoryBase. Make sure you provide the factory which generates the coarse coordinates. Usually this is a coordinate transfer factory."
118 "This is very strange. (Note: you can remove this exception if there's a good reason for)");
120 coordFacts_.push_back(factory);
124 #endif // MUELU_TOGGLECOORDINATESTRANSFER_FACTORY_DEF_HPP
void AddCoordTransferFactory(const RCP< const FactoryBase > &factory)
Add a coordinate transfer factory in the end of list of coordinate transfer factories.
Description of what is happening (more verbose)
Timer to be used in factories. Similar to Monitor but with additional timers.
Exception indicating invalid cast attempted.
void DeclareInput(const std::string &ename, const FactoryBase *factory, const FactoryBase *requestedBy=NoFactory::get())
Callback from FactoryBase::CallDeclareInput() and FactoryBase::DeclareInput()
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Namespace for MueLu classes and methods.
void Build(Level &fineLevel, Level &coarseLevel) const
Build an object with this factory.
ParameterList & set(std::string const &name, T const &value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
void Release(const FactoryBase &factory)
Decrement the storage counter for all the inputs of a factory.
bool isParameter(const std::string &name) const
Exception throws to report errors in the internal logical of the program.
T & Get(const std::string &ename, const FactoryBase *factory=NoFactory::get())
Get data without decrementing associated storage counter (i.e., read-only access)....
void DeclareInput(Level &finelevel, Level &coarseLevel) const
Specifies the data that this class needs, and the factories that generate that data.
RCP< const ParameterList > GetValidParameterList() const
Return a const parameter list of valid parameters that setParameterList() will accept.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Class that holds all level-specific information.