46#ifndef MUELU_FACTORYFACTORY_DECL_HPP
47#define MUELU_FACTORYFACTORY_DECL_HPP
52#include <Teuchos_ParameterEntry.hpp>
53#include <Teuchos_Array.hpp>
61#include "MueLu_FactoryManager.hpp"
70#include "MueLu_AggregateQualityEstimateFactory.hpp"
71#include "MueLu_AggregationExportFactory.hpp"
72#include "MueLu_AmalgamationFactory.hpp"
73#include "MueLu_BlackBoxPFactory.hpp"
74#include "MueLu_BlockedCoarseMapFactory.hpp"
75#include "MueLu_BlockedCoordinatesTransferFactory.hpp"
76#include "MueLu_BlockedDirectSolver.hpp"
77#include "MueLu_BlockedGaussSeidelSmoother.hpp"
78#include "MueLu_BlockedJacobiSmoother.hpp"
79#include "MueLu_BlockedPFactory.hpp"
80#include "MueLu_BlockedRAPFactory.hpp"
81#include "MueLu_BraessSarazinSmoother.hpp"
82#include "MueLu_BrickAggregationFactory.hpp"
83#include "MueLu_ClassicalMapFactory.hpp"
84#include "MueLu_ClassicalPFactory.hpp"
85#include "MueLu_CloneRepartitionInterface.hpp"
86#include "MueLu_CoalesceDropFactory.hpp"
87#include "MueLu_SmooVecCoalesceDropFactory.hpp"
88#include "MueLu_CoarseMapFactory.hpp"
89#include "MueLu_CoarseningVisualizationFactory.hpp"
90#include "MueLu_ConstraintFactory.hpp"
91#include "MueLu_CoupledAggregationFactory.hpp"
92#include "MueLu_CoordinatesTransferFactory.hpp"
93#include "MueLu_DirectSolver.hpp"
94#include "MueLu_DropNegativeEntriesFactory.hpp"
95#include "MueLu_EminPFactory.hpp"
96#include "MueLu_FilteredAFactory.hpp"
97#include "MueLu_FineLevelInputDataFactory.hpp"
98#include "MueLu_GeneralGeometricPFactory.hpp"
99#include "MueLu_GenericRFactory.hpp"
100#include "MueLu_GeometricInterpolationPFactory.hpp"
101#include "MueLu_InterfaceAggregationFactory.hpp"
102#include "MueLu_InterfaceMappingTransferFactory.hpp"
103#include "MueLu_InitialBlockNumberFactory.hpp"
104#include "MueLu_IndefBlockedDiagonalSmoother.hpp"
105#include "MueLu_IsorropiaInterface.hpp"
106#include "MueLu_LineDetectionFactory.hpp"
107#include "MueLu_LocalOrdinalTransferFactory.hpp"
108#include "MueLu_RepartitionInterface.hpp"
109#include "MueLu_RepartitionBlockDiagonalFactory.hpp"
110#include "MueLu_MapTransferFactory.hpp"
111#include "MueLu_MatrixAnalysisFactory.hpp"
112#include "MueLu_MultiVectorTransferFactory.hpp"
113#include "MueLu_NotayAggregationFactory.hpp"
114#include "MueLu_NullspaceFactory.hpp"
115#include "MueLu_NullspacePresmoothFactory.hpp"
116#include "MueLu_PatternFactory.hpp"
117#include "MueLu_PgPFactory.hpp"
118#include "MueLu_RebalanceBlockInterpolationFactory.hpp"
119#include "MueLu_RebalanceBlockRestrictionFactory.hpp"
120#include "MueLu_RebalanceBlockAcFactory.hpp"
121#include "MueLu_RebalanceTransferFactory.hpp"
122#include "MueLu_RegionRFactory.hpp"
123#include "MueLu_RepartitionFactory.hpp"
124#include "MueLu_RepartitionHeuristicFactory.hpp"
125#include "MueLu_RAPFactory.hpp"
126#include "MueLu_RAPShiftFactory.hpp"
127#include "MueLu_RebalanceAcFactory.hpp"
128#include "MueLu_ReorderBlockAFactory.hpp"
129#include "MueLu_SaPFactory.hpp"
130#include "MueLu_ScaledNullspaceFactory.hpp"
131#include "MueLu_SegregatedAFactory.hpp"
132#include "MueLu_SemiCoarsenPFactory.hpp"
133#include "MueLu_SchurComplementFactory.hpp"
134#include "MueLu_SimpleSmoother.hpp"
135#include "MueLu_SmootherFactory.hpp"
136#include "MueLu_StructuredAggregationFactory.hpp"
137#include "MueLu_StructuredLineDetectionFactory.hpp"
138#include "MueLu_SubBlockAFactory.hpp"
139#ifdef HAVE_MUELU_TEKO
140#include "MueLu_TekoSmoother.hpp"
142#include "MueLu_TentativePFactory.hpp"
143#include "MueLu_ToggleCoordinatesTransferFactory.hpp"
144#include "MueLu_TogglePFactory.hpp"
145#include "MueLu_TrilinosSmoother.hpp"
146#include "MueLu_TransPFactory.hpp"
147#include "MueLu_UncoupledAggregationFactory.hpp"
148#include "MueLu_HybridAggregationFactory.hpp"
149#include "MueLu_UnsmooshFactory.hpp"
150#include "MueLu_UserAggregationFactory.hpp"
151#include "MueLu_UserPFactory.hpp"
152#include "MueLu_UzawaSmoother.hpp"
153#include "MueLu_VariableDofLaplacianFactory.hpp"
154#include "MueLu_ZeroSubBlockAFactory.hpp"
155#include "MueLu_ZoltanInterface.hpp"
156#include "MueLu_Zoltan2Interface.hpp"
157#include "MueLu_NodePartitionInterface.hpp"
160#ifdef HAVE_MUELU_KOKKOS_REFACTOR
161#include "MueLu_AmalgamationFactory_kokkos.hpp"
162#include "MueLu_CoalesceDropFactory_kokkos.hpp"
163#include "MueLu_CoarseMapFactory_kokkos.hpp"
164#include "MueLu_CoordinatesTransferFactory_kokkos.hpp"
165#include "MueLu_GeometricInterpolationPFactory_kokkos.hpp"
166#include "MueLu_NullspaceFactory_kokkos.hpp"
167#include "MueLu_SaPFactory_kokkos.hpp"
168#include "MueLu_SemiCoarsenPFactory_kokkos.hpp"
169#include "MueLu_StructuredAggregationFactory_kokkos.hpp"
170#include "MueLu_TentativePFactory_kokkos.hpp"
171#include "MueLu_UncoupledAggregationFactory_kokkos.hpp"
174#ifdef HAVE_MUELU_MATLAB
176#include "../matlab/src/MueLu_SingleLevelMatlabFactory_decl.hpp"
177#include "../matlab/src/MueLu_SingleLevelMatlabFactory_def.hpp"
178#include "../matlab/src/MueLu_TwoLevelMatlabFactory_decl.hpp"
179#include "../matlab/src/MueLu_TwoLevelMatlabFactory_def.hpp"
180#include "../matlab/src/MueLu_MatlabSmoother_decl.hpp"
181#include "../matlab/src/MueLu_MatlabSmoother_def.hpp"
184#ifdef HAVE_MUELU_INTREPID2
185#include "MueLu_IntrepidPCoarsenFactory.hpp"
201#undef MUELU_FACTORYFACTORY_SHORT
204 typedef std::map<std::string, RCP<const FactoryBase> >
FactoryMap;
228 std::string factoryName;
229 Teuchos::ParameterList paramList;
230 if (!param.isList()) {
231 factoryName = Teuchos::getValue<std::string>(param);
233 paramList = Teuchos::getValue<Teuchos::ParameterList>(param);
234 factoryName = paramList.get<std::string>(
"factory");
238 if (factoryName ==
"AggregateQualityEstimateFactory")
return Build2<AggregateQualityEstimateFactory> (paramList, factoryMapIn, factoryManagersIn);
239 if (factoryName ==
"AggregationExportFactory")
return Build2<AggregationExportFactory> (paramList, factoryMapIn, factoryManagersIn);
240 if (factoryName ==
"AmalgamationFactory")
return Build2<AmalgamationFactory> (paramList, factoryMapIn, factoryManagersIn);
241 if (factoryName ==
"BlockedCoarseMapFactory")
return Build2<BlockedCoarseMapFactory> (paramList, factoryMapIn, factoryManagersIn);
242 if (factoryName ==
"BlockedRAPFactory")
return BuildRAPFactory<BlockedRAPFactory> (paramList, factoryMapIn, factoryManagersIn);
243 if (factoryName ==
"BrickAggregationFactory")
return Build2<BrickAggregationFactory> (paramList, factoryMapIn, factoryManagersIn);
244 if (factoryName ==
"ClassicalMapFactory")
return Build2<ClassicalMapFactory> (paramList, factoryMapIn, factoryManagersIn);
245 if (factoryName ==
"ClassicalPFactory")
return Build2<ClassicalPFactory> (paramList, factoryMapIn, factoryManagersIn);
246 if (factoryName ==
"CloneRepartitionInterface")
return Build2<CloneRepartitionInterface> (paramList, factoryMapIn, factoryManagersIn);
247 if (factoryName ==
"CoarseMapFactory")
return Build2<CoarseMapFactory> (paramList, factoryMapIn, factoryManagersIn);
248 if (factoryName ==
"CoarseningVisualizationFactory")
return Build2<CoarseningVisualizationFactory> (paramList, factoryMapIn, factoryManagersIn);
249 if (factoryName ==
"CoalesceDropFactory")
return Build2<CoalesceDropFactory> (paramList, factoryMapIn, factoryManagersIn);
250 if (factoryName ==
"SmooVecCoalesceDropFactory")
return Build2<SmooVecCoalesceDropFactory> (paramList, factoryMapIn, factoryManagersIn);
251 if (factoryName ==
"ConstraintFactory")
return Build2<ConstraintFactory> (paramList, factoryMapIn, factoryManagersIn);
253 if (factoryName ==
"CoordinatesTransferFactory")
return Build2<CoordinatesTransferFactory> (paramList, factoryMapIn, factoryManagersIn);
254 if (factoryName ==
"DirectSolver")
return BuildDirectSolver (paramList, factoryMapIn, factoryManagersIn);
255 if (factoryName ==
"DropNegativeEntriesFactory")
return Build2<DropNegativeEntriesFactory> (paramList, factoryMapIn, factoryManagersIn);
256 if (factoryName ==
"EminPFactory")
return Build2<EminPFactory> (paramList, factoryMapIn, factoryManagersIn);
257 if (factoryName ==
"FilteredAFactory")
return Build2<FilteredAFactory> (paramList, factoryMapIn, factoryManagersIn);
258 if (factoryName ==
"FineLevelInputDataFactory")
return Build2<FineLevelInputDataFactory> (paramList, factoryMapIn, factoryManagersIn);
259 if (factoryName ==
"GeneralGeometricPFactory")
return Build2<GeneralGeometricPFactory> (paramList, factoryMapIn, factoryManagersIn);
260 if (factoryName ==
"GenericRFactory")
return Build2<GenericRFactory> (paramList, factoryMapIn, factoryManagersIn);
261 if (factoryName ==
"GeometricInterpolationPFactory")
return Build2<GeometricInterpolationPFactory> (paramList, factoryMapIn, factoryManagersIn);
262 if (factoryName ==
"HybridAggregationFactory")
return Build2<HybridAggregationFactory> (paramList, factoryMapIn, factoryManagersIn);
263 if (factoryName ==
"InterfaceAggregationFactory")
return Build2<InterfaceAggregationFactory> (paramList, factoryMapIn, factoryManagersIn);
264 if (factoryName ==
"InterfaceMappingTransferFactory")
return Build2<InterfaceMappingTransferFactory> (paramList, factoryMapIn, factoryManagersIn);
265 if (factoryName ==
"InitialBlockNumberFactory")
return Build2<InitialBlockNumberFactory> (paramList, factoryMapIn, factoryManagersIn);
266 if (factoryName ==
"LineDetectionFactory")
return Build2<LineDetectionFactory> (paramList, factoryMapIn, factoryManagersIn);
269 if (factoryName ==
"MapTransferFactory")
return Build2<MapTransferFactory> (paramList, factoryMapIn, factoryManagersIn);
270 if (factoryName ==
"MatrixAnalysisFactory")
return Build2<MatrixAnalysisFactory> (paramList, factoryMapIn, factoryManagersIn);
271 if (factoryName ==
"MultiVectorTransferFactory")
return Build2<MultiVectorTransferFactory> (paramList, factoryMapIn, factoryManagersIn);
273 if (factoryName ==
"NoSmoother")
return rcp(
new SmootherFactory(Teuchos::null));
274#ifdef HAVE_MUELU_KOKKOS_REFACTOR
275 if (factoryName ==
"NotayAggregationFactory")
return Build2<NotayAggregationFactory> (paramList, factoryMapIn, factoryManagersIn);
277 if (factoryName ==
"NullspaceFactory")
return Build2<NullspaceFactory> (paramList, factoryMapIn, factoryManagersIn);
278 if (factoryName ==
"NullspacePresmoothFactory")
return Build2<NullspacePresmoothFactory> (paramList, factoryMapIn, factoryManagersIn);
279 if (factoryName ==
"PatternFactory")
return Build2<PatternFactory> (paramList, factoryMapIn, factoryManagersIn);
280 if (factoryName ==
"PgPFactory")
return Build2<PgPFactory> (paramList, factoryMapIn, factoryManagersIn);
281 if (factoryName ==
"SaPFactory")
return Build2<SaPFactory> (paramList, factoryMapIn, factoryManagersIn);
282 if (factoryName ==
"RAPFactory")
return BuildRAPFactory<RAPFactory> (paramList, factoryMapIn, factoryManagersIn);
283 if (factoryName ==
"RAPShiftFactory")
return BuildRAPFactory<RAPShiftFactory> (paramList, factoryMapIn, factoryManagersIn);
284 if (factoryName ==
"RebalanceAcFactory")
return Build2<RebalanceAcFactory> (paramList, factoryMapIn, factoryManagersIn);
285 if (factoryName ==
"RebalanceTransferFactory")
return Build2<RebalanceTransferFactory> (paramList, factoryMapIn, factoryManagersIn);
286#ifdef HAVE_MUELU_KOKKOS_REFACTOR
287 if (factoryName ==
"RegionRFactory")
return Build2<RegionRFactory> (paramList, factoryMapIn, factoryManagersIn);
289 if (factoryName ==
"ReorderBlockAFactory")
return Build2<ReorderBlockAFactory> (paramList, factoryMapIn, factoryManagersIn);
290 if (factoryName ==
"RepartitionInterface")
return Build2<RepartitionInterface> (paramList, factoryMapIn, factoryManagersIn);
291 if (factoryName ==
"ScaledNullspaceFactory")
return Build2<ScaledNullspaceFactory> (paramList, factoryMapIn, factoryManagersIn);
292 if (factoryName ==
"SegregatedAFactory")
return Build2<SegregatedAFactory> (paramList, factoryMapIn, factoryManagersIn);
293 if (factoryName ==
"SemiCoarsenPFactory")
return Build2<SemiCoarsenPFactory> (paramList, factoryMapIn, factoryManagersIn);
294 if (factoryName ==
"StructuredAggregationFactory")
return Build2<StructuredAggregationFactory> (paramList, factoryMapIn, factoryManagersIn);
295 if (factoryName ==
"StructuredLineDetectionFactory")
return Build2<StructuredLineDetectionFactory> (paramList, factoryMapIn, factoryManagersIn);
296 if (factoryName ==
"SubBlockAFactory")
return Build2<SubBlockAFactory> (paramList, factoryMapIn, factoryManagersIn);
297 if (factoryName ==
"TentativePFactory")
return Build2<TentativePFactory> (paramList, factoryMapIn, factoryManagersIn);
299 if (factoryName ==
"TogglePFactory")
return BuildTogglePFactory<TogglePFactory> (paramList, factoryMapIn, factoryManagersIn);
300 if (factoryName ==
"TransPFactory")
return Build2<TransPFactory> (paramList, factoryMapIn, factoryManagersIn);
301 if (factoryName ==
"TrilinosSmoother")
return BuildTrilinosSmoother (paramList, factoryMapIn, factoryManagersIn);
302 if (factoryName ==
"UncoupledAggregationFactory")
return Build2<UncoupledAggregationFactory> (paramList, factoryMapIn, factoryManagersIn);
303 if (factoryName ==
"UnsmooshFactory")
return Build2<UnsmooshFactory> (paramList, factoryMapIn, factoryManagersIn);
304 if (factoryName ==
"UserAggregationFactory")
return Build2<UserAggregationFactory> (paramList, factoryMapIn, factoryManagersIn);
305 if (factoryName ==
"UserPFactory")
return Build2<UserPFactory> (paramList, factoryMapIn, factoryManagersIn);
306 if (factoryName ==
"VariableDofLaplacianFactory")
return Build2<VariableDofLaplacianFactory> (paramList, factoryMapIn, factoryManagersIn);
307 if (factoryName ==
"ZeroSubBlockAFactory")
return Build2<ZeroSubBlockAFactory> (paramList, factoryMapIn, factoryManagersIn);
308#ifdef HAVE_MUELU_KOKKOS_REFACTOR
309 if (factoryName ==
"AmalgamationFactory_kokkos")
return Build2<AmalgamationFactory_kokkos> (paramList, factoryMapIn, factoryManagersIn);
310 if (factoryName ==
"CoalesceDropFactory_kokkos")
return Build2<CoalesceDropFactory_kokkos> (paramList, factoryMapIn, factoryManagersIn);
311 if (factoryName ==
"CoarseMapFactory_kokkos")
return Build2<CoarseMapFactory_kokkos> (paramList, factoryMapIn, factoryManagersIn);
312 if (factoryName ==
"CoordinatesTransferFactory_kokkos")
return Build2<CoordinatesTransferFactory_kokkos> (paramList, factoryMapIn, factoryManagersIn);
313 if (factoryName ==
"GeometricInterpolationPFactory_kokkos")
return Build2<GeometricInterpolationPFactory_kokkos> (paramList, factoryMapIn, factoryManagersIn);
314 if (factoryName ==
"NullspaceFactory_kokkos")
return Build2<NullspaceFactory_kokkos> (paramList, factoryMapIn, factoryManagersIn);
315 if (factoryName ==
"SaPFactory_kokkos")
return Build2<SaPFactory_kokkos> (paramList, factoryMapIn, factoryManagersIn);
316 if (factoryName ==
"SemiCoarsenPFactory_kokkos")
return Build2<SemiCoarsenPFactory_kokkos> (paramList, factoryMapIn, factoryManagersIn);
317 if (factoryName ==
"StructuredAggregationFactory_kokkos")
return Build2<StructuredAggregationFactory_kokkos> (paramList, factoryMapIn, factoryManagersIn);
318 if (factoryName ==
"TentativePFactory_kokkos")
return Build2<TentativePFactory_kokkos> (paramList, factoryMapIn, factoryManagersIn);
319 if (factoryName ==
"UncoupledAggregationFactory_kokkos")
return Build2<UncoupledAggregationFactory_kokkos> (paramList, factoryMapIn, factoryManagersIn);
322 if (factoryName ==
"ZoltanInterface") {
323#if defined(HAVE_MUELU_ZOLTAN) && defined(HAVE_MPI)
324 return Build2<ZoltanInterface>(paramList, factoryMapIn, factoryManagersIn);
326 TEUCHOS_TEST_FOR_EXCEPTION(
true,
Exceptions::RuntimeError,
"MueLu::FactoryFactory:BuildFactory(): Cannot create a ZoltanInterface object: Zoltan is disabled: HAVE_MUELU_ZOLTAN && HAVE_MPI == false.");
329 if (factoryName ==
"Zoltan2Interface") {
330#if defined(HAVE_MUELU_ZOLTAN2) && defined(HAVE_MPI)
331 return Build2<Zoltan2Interface>(paramList, factoryMapIn, factoryManagersIn);
333 TEUCHOS_TEST_FOR_EXCEPTION(
true,
Exceptions::RuntimeError,
"MueLu::FactoryFactory:BuildFactory(): Cannot create a Zoltan2Interface object: Zoltan2 is disabled: HAVE_MUELU_ZOLTAN2 && HAVE_MPI == false.");
336 if (factoryName ==
"IsorropiaInterface") {
337#if defined(HAVE_MUELU_ISORROPIA) && defined(HAVE_MPI)
338 return Build2<IsorropiaInterface>(paramList, factoryMapIn, factoryManagersIn);
340 TEUCHOS_TEST_FOR_EXCEPTION(
true,
Exceptions::RuntimeError,
"MueLu::FactoryFactory:BuildFactory(): Cannot create a IsorropiaInterface object: Isorropia is disabled: HAVE_MUELU_ISORROPIA && HAVE_MPI == false.");
344 if (factoryName ==
"NodePartitionInterface") {
346 return Build2<NodePartitionInterface>(paramList, factoryMapIn, factoryManagersIn);
348 TEUCHOS_TEST_FOR_EXCEPTION(
true,
Exceptions::RuntimeError,
"MueLu::FactoryFactory:BuildFactory(): Cannot create a NodePartitionInterface object: HAVE_MPI == false.");
352 if (factoryName ==
"RepartitionFactory") {
354 return Build2<RepartitionFactory>(paramList, factoryMapIn, factoryManagersIn);
356 TEUCHOS_TEST_FOR_EXCEPTION(
true,
Exceptions::RuntimeError,
"MueLu::FactoryFactory:BuildFactory(): Cannot create a RepartitionFactory object: HAVE_MPI == false.");
359 if (factoryName ==
"RepartitionHeuristicFactory") {
361 return Build2<RepartitionHeuristicFactory>(paramList, factoryMapIn, factoryManagersIn);
363 TEUCHOS_TEST_FOR_EXCEPTION(
true,
Exceptions::RuntimeError,
"MueLu::FactoryFactory:BuildFactory(): Cannot create a RepartitionHeuristicFactory object: HAVE_MPI == false.");
367 if (factoryName ==
"BlockedCoordinatesTransferFactory")
return BuildBlockedCoordFactory<BlockedCoordinatesTransferFactory> (paramList, factoryMapIn, factoryManagersIn);
368 if (factoryName ==
"BlockedDirectSolver")
return BuildBlockedDirectSolver(paramList, factoryMapIn, factoryManagersIn);
369 if (factoryName ==
"BlockedGaussSeidelSmoother")
return BuildBlockedSmoother<BlockedGaussSeidelSmoother>(paramList, factoryMapIn, factoryManagersIn);
370 if (factoryName ==
"BlockedJacobiSmoother")
return BuildBlockedSmoother<BlockedJacobiSmoother>(paramList, factoryMapIn, factoryManagersIn);
371 if (factoryName ==
"BlockedPFactory")
return BuildBlockedFactory<BlockedPFactory>(paramList, factoryMapIn, factoryManagersIn);
372 if (factoryName ==
"BraessSarazinSmoother")
return BuildBlockedSmoother<BraessSarazinSmoother>(paramList, factoryMapIn, factoryManagersIn);
373 if (factoryName ==
"IndefiniteBlockDiagonalSmoother")
return BuildBlockedSmoother<IndefBlockedDiagonalSmoother>(paramList, factoryMapIn, factoryManagersIn);
374 if (factoryName ==
"SimpleSmoother")
return BuildBlockedSmoother<SimpleSmoother>(paramList, factoryMapIn, factoryManagersIn);
375 if (factoryName ==
"SchurComplementFactory")
return Build2<SchurComplementFactory> (paramList, factoryMapIn, factoryManagersIn);
376 if (factoryName ==
"RebalanceBlockRestrictionFactory")
return BuildBlockedFactory<RebalanceBlockRestrictionFactory>(paramList, factoryMapIn, factoryManagersIn);
377 if (factoryName ==
"RebalanceBlockAcFactory")
return BuildBlockedFactory<RebalanceBlockAcFactory>(paramList, factoryMapIn, factoryManagersIn);
378 if (factoryName ==
"RebalanceBlockInterpolationFactory")
return BuildBlockedFactory<RebalanceBlockInterpolationFactory>(paramList, factoryMapIn, factoryManagersIn);
380 if (factoryName ==
"RepartitionBlockDiagonalFactory")
return Build2<RepartitionBlockDiagonalFactory> (paramList, factoryMapIn, factoryManagersIn);
382#ifdef HAVE_MUELU_TEKO
383 if (factoryName ==
"TekoSmoother")
return BuildTekoSmoother(paramList, factoryMapIn, factoryManagersIn);
385 if (factoryName ==
"UzawaSmoother")
return BuildBlockedSmoother<UzawaSmoother>(paramList, factoryMapIn, factoryManagersIn);
388#ifdef HAVE_MUELU_MATLAB
389 if (factoryName ==
"TwoLevelMatlabFactory")
return Build2<TwoLevelMatlabFactory> (paramList, factoryMapIn, factoryManagersIn);
390 if (factoryName ==
"SingleLevelMatlabFactory")
return Build2<SingleLevelMatlabFactory> (paramList, factoryMapIn, factoryManagersIn);
391 if (factoryName ==
"MatlabSmoother")
return BuildMatlabSmoother (paramList, factoryMapIn, factoryManagersIn);
394#ifdef HAVE_MUELU_INTREPID2
395 if (factoryName ==
"IntrepidPCoarsenFactory")
return Build2<IntrepidPCoarsenFactory> (paramList, factoryMapIn, factoryManagersIn);
399 if (factoryMapIn.find(factoryName) != factoryMapIn.end()) {
401 "MueLu::FactoryFactory: Error during the parsing of: " << std::endl << paramList << std::endl
402 <<
"'" << factoryName <<
"' is not a factory name but an existing instance of a factory." << std::endl
403 <<
"Extra parameters cannot be specified after the creation of the object." << std::endl << std::endl
404 <<
"Correct syntaxes includes:" << std::endl
405 <<
" <Parameter name=\"...\" type=\"string\" value=\"" << factoryName <<
"\"/>" << std::endl
407 <<
" <ParameterList name=\"...\"><Parameter name=\"factory\" type=\"string\" value=\"" << factoryName <<
"\"/></ParameterList>" << std::endl
410 return factoryMapIn.find(factoryName)->second;
413 TEUCHOS_TEST_FOR_EXCEPTION(
true,
Exceptions::RuntimeError,
"MueLu::FactoryFactory: unknown factory name : " << factoryName);
415 TEUCHOS_UNREACHABLE_RETURN(Teuchos::null);
428#define arraysize(ar) (sizeof(ar) / sizeof(ar[0]))
432 RCP<T> factory = rcp(
new T());
434 const char* strarray[] = {
"A",
"P",
"R",
"Graph",
"UnAmalgamationInfo",
"Aggregates",
"Nullspace",
"TransferFactory",
"DofsPerNode"};
435 std::vector<std::string> v(strarray, strarray +
arraysize(strarray));
436 for (
size_t i = 0; i < v.size(); ++i)
437 if (paramList.isParameter(v[i]))
438 factory->SetFactory(v[i],
BuildFactory(paramList.getEntry(v[i]), factoryMapIn, factoryManagersIn));
445 RCP<T> factory = rcp(
new T());
447 ParameterList paramListWithFactories;
450 RCP<const ParameterList> validParamList = factory->GetValidParameterList();
451 TEUCHOS_TEST_FOR_EXCEPTION(validParamList == Teuchos::null,
Exceptions::RuntimeError,
"FactoryFactory::Build2: default parameter list is null. Please fix this.");
452 for (ParameterList::ConstIterator param = validParamList->begin(); param != validParamList->end(); ++param) {
453 const std::string& pName = validParamList->name(param);
455 if (!paramList.isParameter(pName)) {
460 if (validParamList->isType< RCP<const FactoryBase> >(pName)) {
462 RCP<const FactoryBase> generatingFact =
BuildFactory(paramList.getEntry(pName), factoryMapIn, factoryManagersIn);
463 paramListWithFactories.set(pName, generatingFact);
464 }
else if (validParamList->isType<RCP<const ParameterList> >(pName)) {
465 if (pName ==
"ParameterList") {
470 RCP<const ParameterList> subList = Teuchos::sublist(rcp(
new ParameterList(paramList)), pName);
471 paramListWithFactories.set(pName, subList);
474 paramListWithFactories.setEntry(pName, paramList.getEntry(pName));
479 factory->SetParameterList(paramListWithFactories);
487 if (paramList.isSublist(
"TransferFactories") ==
false) {
488 factory = Build2<T>(paramList, factoryMapIn, factoryManagersIn);
491 RCP<Teuchos::ParameterList> paramListNonConst = rcp(
new Teuchos::ParameterList(paramList));
492 RCP<const Teuchos::ParameterList> transferFactories = rcp(
new Teuchos::ParameterList(*sublist(paramListNonConst,
"TransferFactories")));
494 paramListNonConst->remove(
"TransferFactories");
496 factory = Build2<T>(*paramListNonConst, factoryMapIn, factoryManagersIn);
498 for (Teuchos::ParameterList::ConstIterator param = transferFactories->begin(); param != transferFactories->end(); ++param) {
499 RCP<const FactoryBase> p =
BuildFactory(transferFactories->entry(param), factoryMapIn, factoryManagersIn);
500 factory->AddTransferFactory(p);
510 if (paramList.isSublist(
"TransferFactories") ==
false) {
512 factory = Build2<T>(paramList, factoryMapIn, factoryManagersIn);
515 RCP<Teuchos::ParameterList> paramListNonConst = rcp(
new Teuchos::ParameterList(paramList));
516 RCP<const Teuchos::ParameterList> transferFactories = rcp(
new Teuchos::ParameterList(*sublist(paramListNonConst,
"TransferFactories")));
518 paramListNonConst->remove(
"TransferFactories");
521 factory = Build2<T>(*paramListNonConst, factoryMapIn, factoryManagersIn);
525 int numProlongatorFactories = 0;
526 int numPtentFactories = 0;
527 int numCoarseNspFactories = 0;
528 for (Teuchos::ParameterList::ConstIterator param = transferFactories->begin(); param != transferFactories->end(); ++param) {
529 size_t foundNsp = transferFactories->name(param).find(
"Nullspace");
530 if (foundNsp != std::string::npos && foundNsp == 0 && transferFactories->name(param).length()==10) {
531 numCoarseNspFactories++;
534 size_t foundPtent = transferFactories->name(param).find(
"Ptent");
535 if (foundPtent != std::string::npos && foundPtent == 0 && transferFactories->name(param).length()==6) {
539 size_t foundP = transferFactories->name(param).find(
"P");
540 if (foundP != std::string::npos && foundP == 0 && transferFactories->name(param).length()==2) {
541 numProlongatorFactories++;
545 TEUCHOS_TEST_FOR_EXCEPTION(numProlongatorFactories!=numCoarseNspFactories,
Exceptions::RuntimeError,
"FactoryFactory::BuildToggleP: The user has to provide the same number of prolongator and coarse nullspace factories!");
546 TEUCHOS_TEST_FOR_EXCEPTION(numPtentFactories!=numCoarseNspFactories,
Exceptions::RuntimeError,
"FactoryFactory::BuildToggleP: The user has to provide the same number of ptent and coarse nullspace factories!");
547 TEUCHOS_TEST_FOR_EXCEPTION(numProlongatorFactories < 2,
Exceptions::RuntimeError,
"FactoryFactory::BuildToggleP: The TogglePFactory needs at least two different prolongation operators. The factories have to be provided using the names P%i and Nullspace %i, where %i denotes a number between 1 and 9.");
550 std::vector<Teuchos::ParameterEntry> prolongatorFactoryNames(numProlongatorFactories);
551 std::vector<Teuchos::ParameterEntry> coarseNspFactoryNames(numProlongatorFactories);
552 std::vector<Teuchos::ParameterEntry> ptentFactoryNames(numProlongatorFactories);
554 for (Teuchos::ParameterList::ConstIterator param = transferFactories->begin(); param != transferFactories->end(); ++param) {
555 size_t foundNsp = transferFactories->name(param).find(
"Nullspace");
556 if (foundNsp != std::string::npos && foundNsp == 0 && transferFactories->name(param).length()==10) {
557 int number = atoi(&(transferFactories->name(param).at(9)));
558 TEUCHOS_TEST_FOR_EXCEPTION(number < 1 || number > numProlongatorFactories,
Exceptions::RuntimeError,
"FactoryFactory::BuildToggleP: Please use the format Nullspace%i with %i an integer between 1 and the maximum number of prolongation operators in TogglePFactory!");
559 coarseNspFactoryNames[number-1] = transferFactories->entry(param);
562 size_t foundPtent = transferFactories->name(param).find(
"Ptent");
563 if (foundPtent != std::string::npos && foundPtent == 0 && transferFactories->name(param).length()==6) {
564 int number = atoi(&(transferFactories->name(param).at(5)));
565 TEUCHOS_TEST_FOR_EXCEPTION(number < 1 || number > numPtentFactories,
Exceptions::RuntimeError,
"FactoryFactory::BuildToggleP: Please use the format Ptent%i with %i an integer between 1 and the maximum number of prolongation operators in TogglePFactory!");
566 ptentFactoryNames[number-1] = transferFactories->entry(param);
569 size_t foundP = transferFactories->name(param).find(
"P");
570 if (foundP != std::string::npos && foundP == 0 && transferFactories->name(param).length()==2) {
571 int number = atoi(&(transferFactories->name(param).at(1)));
572 TEUCHOS_TEST_FOR_EXCEPTION(number < 1 || number > numProlongatorFactories,
Exceptions::RuntimeError,
"FactoryFactory::BuildToggleP: Please use the format P%i with %i an integer between 1 and the maximum number of prolongation operators in TogglePFactory!");
573 prolongatorFactoryNames[number-1] = transferFactories->entry(param);
579 for (std::vector<Teuchos::ParameterEntry>::const_iterator it = prolongatorFactoryNames.begin(); it != prolongatorFactoryNames.end(); ++it) {
580 RCP<const FactoryBase> p =
BuildFactory(*it, factoryMapIn, factoryManagersIn);
581 factory->AddProlongatorFactory(p);
585 for (std::vector<Teuchos::ParameterEntry>::const_iterator it = ptentFactoryNames.begin(); it != ptentFactoryNames.end(); ++it) {
586 RCP<const FactoryBase> p =
BuildFactory(*it, factoryMapIn, factoryManagersIn);
587 factory->AddPtentFactory(p);
591 for (std::vector<Teuchos::ParameterEntry>::const_iterator it = coarseNspFactoryNames.begin(); it != coarseNspFactoryNames.end(); ++it) {
592 RCP<const FactoryBase> p =
BuildFactory(*it, factoryMapIn, factoryManagersIn);
593 factory->AddCoarseNullspaceFactory(p);
600 RCP<ToggleCoordinatesTransferFactory> factory;
601 TEUCHOS_TEST_FOR_EXCEPTION(paramList.isSublist(
"TransferFactories") ==
false,
Exceptions::RuntimeError,
"FactoryFactory::BuildToggleCoordinatesTransferFactory: the ToggleCoordinatesTransferFactory needs a sublist 'TransferFactories' containing information about the subfactories for coordinate transfer!");
603 RCP<Teuchos::ParameterList> paramListNonConst = rcp(
new Teuchos::ParameterList(paramList));
604 RCP<const Teuchos::ParameterList> transferFactories = rcp(
new Teuchos::ParameterList(*sublist(paramListNonConst,
"TransferFactories")));
605 paramListNonConst->remove(
"TransferFactories");
608 factory = Build2<ToggleCoordinatesTransferFactory>(*paramListNonConst, factoryMapIn, factoryManagersIn);
612 int numCoordTransferFactories = 0;
613 for (Teuchos::ParameterList::ConstIterator param = transferFactories->begin(); param != transferFactories->end(); ++param) {
614 size_t foundCoordinates = transferFactories->name(param).find(
"Coordinates");
615 if (foundCoordinates != std::string::npos && foundCoordinates == 0 && transferFactories->name(param).length()==12) {
616 numCoordTransferFactories++;
620 TEUCHOS_TEST_FOR_EXCEPTION(numCoordTransferFactories != 2,
Exceptions::RuntimeError,
"FactoryFactory::BuildToggleCoordinatesTransfer: The ToggleCoordinatesTransferFactory needs two (different) coordinate transfer factories. The factories have to be provided using the names Coordinates%i, where %i denotes a number between 1 and 9.");
623 std::vector<Teuchos::ParameterEntry> coarseCoordsFactoryNames(numCoordTransferFactories);
625 for (Teuchos::ParameterList::ConstIterator param = transferFactories->begin(); param != transferFactories->end(); ++param) {
626 size_t foundCoords = transferFactories->name(param).find(
"Coordinates");
627 if (foundCoords != std::string::npos && foundCoords == 0 && transferFactories->name(param).length()==12) {
628 int number = atoi(&(transferFactories->name(param).at(11)));
629 TEUCHOS_TEST_FOR_EXCEPTION(number < 1 || number > numCoordTransferFactories,
Exceptions::RuntimeError,
"FactoryFactory::BuildToggleCoordinatesTransfer: Please use the format Coordinates%i with %i an integer between 1 and the maximum number of coordinate transfer factories in ToggleCoordinatesTransferFactory!");
630 coarseCoordsFactoryNames[number-1] = transferFactories->entry(param);
636 for (std::vector<Teuchos::ParameterEntry>::const_iterator it = coarseCoordsFactoryNames.begin(); it != coarseCoordsFactoryNames.end(); ++it) {
637 RCP<const FactoryBase> p =
BuildFactory(*it, factoryMapIn, factoryManagersIn);
638 factory->AddCoordTransferFactory(p);
646 RCP<CoupledAggregationFactory> factory = Build<CoupledAggregationFactory>(paramList, factoryMapIn, factoryManagersIn);
648 if (paramList.isParameter(
"aggregation: ordering"))
649 factory->SetOrdering(paramList.get<std::string>(
"aggregation: ordering"));
651 if (paramList.isParameter(
"aggregation: max selected neighbors"))
652 factory->SetMaxNeighAlreadySelected(paramList.get<
int>(
"aggregation: max selected neighbors"));
654 if (paramList.isParameter(
"Phase3AggCreation"))
655 factory->SetPhase3AggCreation(paramList.get<
double>(
"Phase3AggCreation"));
657 if(paramList.isParameter(
"aggregation: min agg size"))
658 factory->SetMinNodesPerAggregate(paramList.get<
int>(
"aggregation: min agg size"));
674 if (paramList.begin() == paramList.end())
677 TEUCHOS_TEST_FOR_EXCEPTION(paramList.get<std::string>(
"factory") !=
"TrilinosSmoother",
Exceptions::RuntimeError,
"");
682 std::string type=
"";
if(paramList.isParameter(
"type")) type = paramList.get<std::string>(
"type");
683 int overlap=0;
if(paramList.isParameter(
"overlap")) overlap = paramList.get<
int> (
"overlap");
685 Teuchos::ParameterList params;
if(paramList.isParameter(
"ParameterList")) params = paramList.get<Teuchos::ParameterList>(
"ParameterList");
694 Teuchos::RCP<TrilinosSmoother> trilSmoo = Teuchos::rcp(
new TrilinosSmoother(type, params, overlap));
696 if (paramList.isParameter(
"LineDetection_Layers")) {
697 RCP<const FactoryBase> generatingFact =
BuildFactory(paramList.getEntry(
"LineDetection_Layers"), factoryMapIn, factoryManagersIn);
698 trilSmoo->SetFactory(
"LineDetection_Layers", generatingFact);
700 if (paramList.isParameter(
"LineDetection_VertLineIds")) {
701 RCP<const FactoryBase> generatingFact =
BuildFactory(paramList.getEntry(
"LineDetection_Layers"), factoryMapIn, factoryManagersIn);
702 trilSmoo->SetFactory(
"LineDetection_Layers", generatingFact);
704 if (paramList.isParameter(
"CoarseNumZLayers")) {
705 RCP<const FactoryBase> generatingFact =
BuildFactory(paramList.getEntry(
"CoarseNumZLayers"), factoryMapIn, factoryManagersIn);
706 trilSmoo->SetFactory(
"CoarseNumZLayers", generatingFact);
709 RCP<SmootherFactory> smooFact = rcp(
new SmootherFactory(Teuchos::null));
710 Teuchos::ParameterList smooFactParams;
712 smooFact->SetParameterList(smooFactParams);
713 smooFact->SetSmootherPrototypes(trilSmoo);
717#ifdef HAVE_MUELU_MATLAB
730 if (paramList.begin() == paramList.end())
733 TEUCHOS_TEST_FOR_EXCEPTION(paramList.get<std::string>(
"factory") !=
"MatlabSmoother",
Exceptions::RuntimeError,
"");
739 Teuchos::RCP<MatlabSmoother> matSmoo = Teuchos::rcp(
new MatlabSmoother(paramList));
746 if (paramList.begin() == paramList.end())
751 std::string type;
if(paramList.isParameter(
"type")) type = paramList.get<std::string>(
"type");
753 Teuchos::ParameterList params;
if(paramList.isParameter(
"ParameterList")) params = paramList.get<Teuchos::ParameterList>(
"ParameterList");
761 RCP<ParameterList> paramListNonConst = rcp(
new ParameterList(paramList));
764 std::vector<RCP<FactoryManager> > facManagers;
768 bool blockExists =
true;
769 while (blockExists ==
true) {
770 std::stringstream ss;
771 ss <<
"block" << blockid;
773 if(paramList.isSublist(ss.str()) ==
true) {
775 RCP<const ParameterList> b = rcp(
new ParameterList(*sublist(paramListNonConst, ss.str())));
777 RCP<FactoryManager> M = Teuchos::null;
779 if (b->isParameter(
"group")) {
781 std::string facManagerName = b->get< std::string >(
"group");
782 TEUCHOS_TEST_FOR_EXCEPTION(factoryManagersIn.count(facManagerName) != 1,
Exceptions::RuntimeError,
"Factory manager has not been found. Please check the spelling of the factory managers in your xml file.");
783 RCP<FactoryManagerBase> Mb = factoryManagersIn.find(facManagerName)->second;
784 M = Teuchos::rcp_dynamic_cast<FactoryManager>(Mb);
785 TEUCHOS_TEST_FOR_EXCEPTION(M==Teuchos::null,
Exceptions::RuntimeError,
"Failed to cast FactoryManagerBase object to FactoryManager.");
789 for (ParameterList::ConstIterator param = b->begin(); param != b->end(); ++param) {
790 RCP<const FactoryBase> p =
BuildFactory(b->entry(param), factoryMapIn, factoryManagersIn);
791 M->SetFactory(b->name(param),p);
796 M->SetIgnoreUserData(
true);
797 facManagers.push_back(M);
798 paramListNonConst->remove(ss.str());
808 RCP<T> bs = Build2<T>(*paramListNonConst, factoryMapIn, factoryManagersIn);
816 for (
int i = 0; i<Teuchos::as<int>(facManagers.size()); i++) {
817 bs->AddFactoryManager(facManagers[i],i);
823#ifdef HAVE_MUELU_TEKO
826 RCP<ParameterList> paramListNonConst = rcp(
new ParameterList(paramList));
827 RCP<ParameterList> tekoParams = rcp(
new ParameterList(paramListNonConst->sublist(
"Inverse Factory Library")));
828 paramListNonConst->remove(
"Inverse Factory Library");
831 RCP<TekoSmoother> bs = Build2<TekoSmoother>(*paramListNonConst, factoryMapIn, factoryManagersIn);
840 bs->SetTekoParameters(tekoParams);
864 RCP<T> pfac = Teuchos::null;
867 RCP<ParameterList> paramListNonConst = rcp(
new ParameterList(paramList));
870 std::vector<RCP<FactoryManager> > facManagers;
874 bool blockExists =
true;
875 while (blockExists ==
true) {
876 std::stringstream ss;
877 ss <<
"block" << blockid;
879 if(paramList.isSublist(ss.str()) ==
true) {
881 RCP<const ParameterList> b = rcp(
new ParameterList(*sublist(paramListNonConst, ss.str())));
883 RCP<FactoryManager> M = Teuchos::null;
885 if (b->isParameter(
"group")) {
887 std::string facManagerName = b->get< std::string >(
"group");
888 TEUCHOS_TEST_FOR_EXCEPTION(factoryManagersIn.count(facManagerName) != 1,
Exceptions::RuntimeError,
"Factory manager has not been found. Please check the spelling of the factory managers in your xml file.");
889 RCP<FactoryManagerBase> Mb = factoryManagersIn.find(facManagerName)->second;
890 M = Teuchos::rcp_dynamic_cast<FactoryManager>(Mb);
891 TEUCHOS_TEST_FOR_EXCEPTION(M==Teuchos::null,
Exceptions::RuntimeError,
"Failed to cast FactoryManagerBase object to FactoryManager.");
895 for (ParameterList::ConstIterator param = b->begin(); param != b->end(); ++param) {
896 RCP<const FactoryBase> p =
BuildFactory(b->entry(param), factoryMapIn, factoryManagersIn);
897 M->SetFactory(b->name(param),p);
902 M->SetIgnoreUserData(
true);
903 facManagers.push_back(M);
904 paramListNonConst->remove(ss.str());
914 pfac = Build2<T>(*paramListNonConst, factoryMapIn, factoryManagersIn);
917 for(
size_t i = 0; i<facManagers.size(); i++) {
918 pfac->AddFactoryManager(facManagers[i]);
927 RCP<T> pfac = Teuchos::null;
930 RCP<ParameterList> paramListNonConst = rcp(
new ParameterList(paramList));
933 std::vector<RCP<const FactoryBase> > facBase;
937 bool blockExists =
true;
938 while (blockExists ==
true) {
939 std::stringstream ss;
940 ss <<
"block" << blockid;
942 if(paramList.isSublist(ss.str()) ==
true) {
944 RCP<const ParameterList> b = rcp(
new ParameterList(*sublist(paramListNonConst, ss.str())));
947 for (ParameterList::ConstIterator param = b->begin(); param != b->end(); ++param) {
948 RCP<const FactoryBase> p =
BuildFactory(b->entry(param), factoryMapIn, factoryManagersIn);
949 facBase.push_back(p);
953 paramListNonConst->remove(ss.str());
963 pfac = Build2<T>(*paramListNonConst, factoryMapIn, factoryManagersIn);
966 for(
size_t i = 0; i<facBase.size(); i++) {
967 pfac->AddFactory(facBase[i]);
976#define MUELU_FACTORYFACTORY_SHORT
MueLu::DefaultLocalOrdinal LocalOrdinal
MueLu::DefaultScalar Scalar
MueLu::DefaultGlobalOrdinal GlobalOrdinal
Base class for MueLu classes.
direct solver for nxn blocked matrices
Class that encapsulates direct solvers. Autoselection of AmesosSmoother or Amesos2Smoother according ...
Exception throws to report errors in the internal logical of the program.
Factory that can generate other factories from.
RCP< FactoryBase > BuildBlockedDirectSolver(const Teuchos::ParameterList &, const FactoryMap &, const FactoryManagerMap &) const
std::map< std::string, RCP< const FactoryBase > > FactoryMap
std::map< std::string, RCP< FactoryManagerBase > > FactoryManagerMap
RCP< ToggleCoordinatesTransferFactory > BuildToggleCoordinatesTransferFactory(const Teuchos::ParameterList ¶mList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
RCP< T > BuildBlockedFactory(const Teuchos::ParameterList ¶mList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
RCP< FactoryBase > BuildBlockedSmoother(const Teuchos::ParameterList ¶mList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
RCP< FactoryBase > BuildTekoSmoother(const Teuchos::ParameterList ¶mList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
RCP< FactoryBase > BuildCoupledAggregationFactory(const Teuchos::ParameterList ¶mList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
CoupledAggregationFactory.
RCP< T > BuildTogglePFactory(const Teuchos::ParameterList ¶mList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
RCP< T > BuildRAPFactory(const Teuchos::ParameterList ¶mList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
RCP< T > BuildBlockedCoordFactory(const Teuchos::ParameterList ¶mList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
RCP< FactoryBase > BuildDirectSolver(const Teuchos::ParameterList ¶mList, const FactoryMap &, const FactoryManagerMap &) const
RCP< T > Build(const Teuchos::ParameterList ¶mList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
virtual RCP< const FactoryBase > BuildFactory(const Teuchos::ParameterEntry ¶m, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
: Interpret Factory parameter list and build new factory
RCP< T > Build2(const Teuchos::ParameterList ¶mList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
RCP< FactoryBase > BuildTrilinosSmoother(const Teuchos::ParameterList ¶mList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
TrilinosSmoother.
RCP< FactoryBase > BuildMatlabSmoother(const Teuchos::ParameterList ¶mList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
MatlabSmoother.
This class specifies the default factory that should generate some data on a Level if the data does n...
static const RCP< const NoFactory > getRCP()
Static Get() functions.
Generic Smoother Factory for generating the smoothers of the MG hierarchy.
Class that encapsulates external library smoothers.
Namespace for MueLu classes and methods.
KokkosClassic::DefaultNode::DefaultNodeType DefaultNode