46 #ifndef MUELU_TOGGLEPFACTORY_DEF_HPP 
   47 #define MUELU_TOGGLEPFACTORY_DEF_HPP 
   61   template <
class Scalar, 
class LocalOrdinal, 
class GlobalOrdinal, 
class Node>
 
   65 #define SET_VALID_ENTRY(name) validParamList->setEntry(name, MasterList::getEntry(name)) 
   68 #undef  SET_VALID_ENTRY 
   70     return validParamList;
 
   73   template <
class Scalar, 
class LocalOrdinal, 
class GlobalOrdinal, 
class Node>
 
   76     for (std::vector<
RCP<const FactoryBase> >::const_iterator it = prolongatorFacts_.begin(); it != prolongatorFacts_.end(); ++it) {
 
   78       (*it)->CallDeclareInput(coarseLevel); 
 
   80     for (std::vector<
RCP<const FactoryBase> >::const_iterator it = ptentFacts_.begin(); it != ptentFacts_.end(); ++it) {
 
   82       (*it)->CallDeclareInput(coarseLevel); 
 
   84     for (std::vector<
RCP<const FactoryBase> >::const_iterator it = nspFacts_.begin(); it != nspFacts_.end(); ++it) {
 
   85       coarseLevel.
DeclareInput(
"Nullspace", (*it).get(), 
this);  
 
   86       (*it)->CallDeclareInput(coarseLevel); 
 
   99     hasDeclaredInput_ = 
true;
 
  102   template <
class Scalar, 
class LocalOrdinal, 
class GlobalOrdinal, 
class Node>
 
  105     std::ostringstream levelstr;
 
  112     int nProlongatorFactory = 0; 
 
  116     std::string mode = Teuchos::as<std::string>(pL.
get<std::string>(
"toggle: mode"));
 
  117     int semicoarsen_levels = Teuchos::as<int>(pL.
get<
int>(
"semicoarsen: number of levels"));
 
  124       GetOStream(
Runtime1) << 
"Number of layers for semicoarsening: " << NumZDir << std::endl;
 
  128     if(fineLevel.
GetLevelID() >= semicoarsen_levels || NumZDir == 1) {
 
  129       nProlongatorFactory = 1;
 
  131       nProlongatorFactory = 0;
 
  139     GetOStream(
Runtime0) << 
"TogglePFactory: call transfer factory: " << (prolongatorFacts_[nProlongatorFactory])->description() << std::endl;
 
  140     prolongatorFacts_[nProlongatorFactory]->CallBuild(coarseLevel);
 
  141     P = coarseLevel.
Get< 
RCP<Matrix> >(
"P", (prolongatorFacts_[nProlongatorFactory]).
get());
 
  144     Ptent = coarseLevel.
Get< 
RCP<Matrix> >(
"P", (ptentFacts_[nProlongatorFactory]).
get());
 
  145     coarseNullspace = coarseLevel.
Get< 
RCP<MultiVector> >(
"Nullspace", (nspFacts_[nProlongatorFactory]).
get());
 
  148     for(
size_t t=0; t<nspFacts_.size(); ++t) {
 
  149       coarseLevel.
Release(*(prolongatorFacts_[t]));
 
  150       coarseLevel.
Release(*(ptentFacts_[t]));
 
  151       coarseLevel.
Release(*(nspFacts_[t]));
 
  155     Set(coarseLevel, 
"P", P);
 
  156     Set(coarseLevel, 
"Nullspace", coarseNullspace);
 
  157     Set(coarseLevel, 
"Ptent", Ptent);
 
  158     Set(coarseLevel, 
"Chosen P", nProlongatorFactory);
 
  161   template <
class Scalar, 
class LocalOrdinal, 
class GlobalOrdinal, 
class Node>
 
  165                                "MueLu::TogglePFactory::AddProlongatorFactory: Transfer factory is not derived from TwoLevelFactoryBase. " 
  166                                "This is very strange. (Note: you can remove this exception if there's a good reason for)");
 
  168     prolongatorFacts_.push_back(factory);
 
  171   template <
class Scalar, 
class LocalOrdinal, 
class GlobalOrdinal, 
class Node>
 
  175                                "MueLu::TogglePFactory::AddPtentFactory: Transfer factory is not derived from TwoLevelFactoryBase. " 
  176                                "This is very strange. (Note: you can remove this exception if there's a good reason for)");
 
  178     ptentFacts_.push_back(factory);
 
  181   template <
class Scalar, 
class LocalOrdinal, 
class GlobalOrdinal, 
class Node>
 
  185                                "MueLu::TogglePFactory::AddCoarseNullspaceFactory: Transfer factory is not derived from TwoLevelFactoryBase. Make sure you provide the factory which generates the coarse level nullspace information. Usually this is a prolongator factory." 
  186                                "This is very strange. (Note: you can remove this exception if there's a good reason for)");
 
  188     nspFacts_.push_back(factory);
 
  194 #endif // MUELU_TOGGLEPFACTORY_DEF_HPP 
Exception indicating invalid cast attempted. 
 
T & Get(const std::string &ename, const FactoryBase *factory=NoFactory::get())
Get data without decrementing associated storage counter (i.e., read-only access). Usage: Level->Get< RCP<Matrix> >("A", factory) if factory == NULL => use default factory. 
 
void Build(Level &fineLevel, Level &coarseLevel) const 
Build method. 
 
void Release(const FactoryBase &factory)
Decrement the storage counter for all the inputs of a factory. 
 
T & get(const std::string &name, T def_value)
 
void AddProlongatorFactory(const RCP< const FactoryBase > &factory)
Add a prolongator factory in the end of list of prolongator factories. 
 
Timer to be used in factories. Similar to Monitor but with additional timers. 
 
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
 
User data are always kept. This flag is set automatically when Level::Set("data", data) is used...
 
One-liner description of what is happening. 
 
static const NoFactory * get()
 
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
 
Class that holds all level-specific information. 
 
void RemoveKeepFlag(const std::string &ename, const FactoryBase *factory, KeepType keep=MueLu::All)
 
int GetLevelID() const 
Return level number. 
 
Exception throws to report errors in the internal logical of the program. 
 
Description of what is happening (more verbose) 
 
void DeclareInput(Level &fineLevel, Level &coarseLevel) const 
Input. 
 
void AddPtentFactory(const RCP< const FactoryBase > &factory)
Add a tentative prolongator factory in the end of list of prolongator factories. 
 
void DeclareInput(const std::string &ename, const FactoryBase *factory, const FactoryBase *requestedBy=NoFactory::get())
Callback from FactoryBase::CallDeclareInput() and FactoryBase::DeclareInput() 
 
#define SET_VALID_ENTRY(name)
 
void AddCoarseNullspaceFactory(const RCP< const FactoryBase > &factory)
Add a coarse nullspace factory in the end of list of coarse nullspace factories. 
 
bool IsAvailable(const std::string &ename, const FactoryBase *factory=NoFactory::get()) const 
Test whether a need's value has been saved. 
 
RCP< const ParameterList > GetValidParameterList() const 
Return a const parameter list of valid parameters that setParameterList() will accept.