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;
88 RCP<xdMV> coarseCoords = coarseLevel.Get<
RCP<xdMV> >(
"Coordinates",(coordFacts_[chosenP]).
get());
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 Exception indicating invalid cast attempted.
ParameterList & set(std::string const &name, T const &value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
Timer to be used in factories. Similar to Monitor but with additional timers.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Namespace for MueLu classes and methods.
void AddCoordTransferFactory(const RCP< const FactoryBase > &factory)
Add a coordinate transfer factory in the end of list of coordinate transfer factories.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Class that holds all level-specific information.
void Build(Level &fineLevel, Level &coarseLevel) const
Build an object with this factory.
bool isParameter(const std::string &name) const
void DeclareInput(Level &finelevel, Level &coarseLevel) const
Specifies the data that this class needs, and the factories that generate that data.
Exception throws to report errors in the internal logical of the program.
Description of what is happening (more verbose)
void DeclareInput(const std::string &ename, const FactoryBase *factory, const FactoryBase *requestedBy=NoFactory::get())
Callback from FactoryBase::CallDeclareInput() and FactoryBase::DeclareInput()
RCP< const ParameterList > GetValidParameterList() const
Return a const parameter list of valid parameters that setParameterList() will accept.