47 #ifndef PACKAGES_MUELU_SRC_INTERFACE_FACADECLASSES_Simple_DEF_HPP_
48 #define PACKAGES_MUELU_SRC_INTERFACE_FACADECLASSES_Simple_DEF_HPP_
59 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
63 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
67 std::string defaultString =
68 "<ParameterList name=\"Input\">"
69 "<Parameter name=\"MueLu preconditioner\" type=\"string\" value=\"undefined\"/>"
70 "<Parameter name=\"Block 1: dofs per node\" type=\"int\" value=\"1\"/>"
71 "<Parameter name=\"Block 2: dofs per node\" type=\"int\" value=\"1\"/>"
72 "<Parameter name=\"Block 1: smoother\" type=\"string\" value=\"Symmetric Gauss-Seidel\"/>"
73 "<Parameter name=\"Block 1: level-of-fill\" type=\"int\" value=\"0\"/>"
74 "<Parameter name=\"Block 1: relaxation: sweeps\" type=\"int\" value=\"1\"/>"
75 "<Parameter name=\"Block 1: relaxation: damping factor\" type=\"double\" value=\"1.0\"/>"
76 "<Parameter name=\"Block 1: transfer smoothing\" type=\"bool\" value=\"true\"/>"
77 "<Parameter name=\"Block 2: smoother\" type=\"string\" value=\"Symmetric Gauss-Seidel\"/>"
78 "<Parameter name=\"Block 2: level-of-fill\" type=\"int\" value=\"0\"/>"
79 "<Parameter name=\"Block 2: relaxation: sweeps\" type=\"int\" value=\"1\"/>"
80 "<Parameter name=\"Block 2: relaxation: damping factor\" type=\"double\" value=\"1.0\"/>"
81 "<Parameter name=\"Block 2: transfer smoothing\" type=\"bool\" value=\"true\"/>"
82 "<Parameter name=\"Simple: damping factor\" type=\"double\" value=\"1.0\"/>"
83 "<Parameter name=\"max levels\" type=\"int\" value=\"5\"/>"
84 "<Parameter name=\"coarse: max size\" type=\"int\" value=\"25000\"/>"
85 "<Parameter name=\"verbosity\" type=\"string\" value=\"High\"/>"
95 std::string finalString =
97 "<ParameterList name=\"MueLu\">"
98 " <ParameterList name=\"Factories\">"
99 " <ParameterList name=\"mySubBlockAFactory1\">"
100 " <Parameter name=\"factory\" type=\"string\" value=\"SubBlockAFactory\"/>"
101 " <Parameter name=\"block row\" type=\"int\" value=\"0\"/>"
102 " <Parameter name=\"block col\" type=\"int\" value=\"0\"/>"
103 " <Parameter name=\"Range map: Striding info\" type=\"string\" value=\"{ XXXBlock 1: dofs per nodeYYY }\"/>"
104 " <Parameter name=\"Domain map: Striding info\" type=\"string\" value=\"{ XXXBlock 1: dofs per nodeYYY }\"/>"
107 " <ParameterList name=\"myAggFact1\">"
108 " <Parameter name=\"factory\" type=\"string\" value=\"UncoupledAggregationFactory\"/>"
109 " <Parameter name=\"aggregation: min agg size\" type=\"int\" value=\"5\"/>"
110 " <Parameter name=\"aggregation: max selected neighbors\" type=\"int\" value=\"1\"/>"
113 " <!-- tell the tentative prolongator that we have 2 DOFs per node on the coarse levels -->"
114 " <ParameterList name=\"myCoarseMap1\">"
115 " <Parameter name=\"factory\" type=\"string\" value=\"CoarseMapFactory\"/>"
116 " <Parameter name=\"Striding info\" type=\"string\" value=\"{ XXXBlock 1: dofs per nodeYYY }\"/>"
117 " <Parameter name=\"Strided block id\" type=\"int\" value=\"-1\"/>"
120 " <ParameterList name=\"myTentativePFact1\">"
121 " <Parameter name=\"factory\" type=\"string\" value=\"TentativePFactory\"/>"
122 " <Parameter name=\"A\" type=\"string\" value=\"mySubBlockAFactory1\"/>"
123 " <Parameter name=\"Aggregates\" type=\"string\" value=\"myAggFact1\"/>"
124 " <Parameter name=\"CoarseMap\" type=\"string\" value=\"myCoarseMap1\"/>"
127 " <ParameterList name=\"myPFact1\">"
128 " <Parameter name=\"factory\" type=\"string\" value=\"PgPFactory\"/>"
129 " <Parameter name=\"A\" type=\"string\" value=\"mySubBlockAFactory1\"/>"
130 " <Parameter name=\"P\" type=\"string\" value=\"myTentativePFact1\"/>"
133 " <ParameterList name=\"myRFact1\">"
134 " <Parameter name=\"factory\" type=\"string\" value=\"GenericRFactory\"/>"
135 " <Parameter name=\"P\" type=\"string\" value=\"myPFact1\"/>"
138 " <!-- We have to use Nullspace1 here. If \"Nullspace1\" is not set the"
139 " Factory creates the default null space containing of constant"
141 " <ParameterList name=\"myNspFact1\">"
142 " <Parameter name=\"factory\" type=\"string\" value=\"NullspaceFactory\"/>"
143 " <Parameter name=\"Fine level nullspace\" type=\"string\" value=\"Nullspace1\"/>"
144 " <Parameter name=\"Nullspace1\" type=\"string\" value=\"myTentativePFact1\"/>"
147 " <!-- BLOCK 2 (for submatrix A_{11}) PRESSURE PART -->"
148 " <ParameterList name=\"mySubBlockAFactory2\">"
149 " <Parameter name=\"factory\" type=\"string\" value=\"SubBlockAFactory\"/>"
150 " <Parameter name=\"block row\" type=\"int\" value=\"1\"/>"
151 " <Parameter name=\"block col\" type=\"int\" value=\"1\"/>"
152 " <Parameter name=\"Range map: Striding info\" type=\"string\" value=\"{ XXXBlock 2: dofs per nodeYYY }\"/>"
153 " <Parameter name=\"Domain map: Striding info\" type=\"string\" value=\"{ XXXBlock 2: dofs per nodeYYY }\"/>"
156 " <!-- tell the tentative prolongator that we have 2 DOFs per node on the coarse levels -->"
157 " <ParameterList name=\"myCoarseMap2\">"
158 " <Parameter name=\"factory\" type=\"string\" value=\"CoarseMapFactory\"/>"
159 " <Parameter name=\"Striding info\" type=\"string\" value=\"{ XXXBlock 2: dofs per nodeYYY }\"/>"
160 " <Parameter name=\"Strided block id\" type=\"int\" value=\"-1\"/>"
163 " <ParameterList name=\"myTentativePFact2\">"
164 " <Parameter name=\"factory\" type=\"string\" value=\"TentativePFactory\"/>"
165 " <Parameter name=\"A\" type=\"string\" value=\"mySubBlockAFactory2\"/>"
166 " <Parameter name=\"Aggregates\" type=\"string\" value=\"myAggFact1\"/>"
167 " <Parameter name=\"CoarseMap\" type=\"string\" value=\"myCoarseMap2\"/>"
170 " <ParameterList name=\"myPFact2\">"
171 " <Parameter name=\"factory\" type=\"string\" value=\"SaPFactory\"/>"
172 " <Parameter name=\"A\" type=\"string\" value=\"mySubBlockAFactory2\"/>"
173 " <Parameter name=\"P\" type=\"string\" value=\"myTentativePFact2\"/>"
176 " <ParameterList name=\"myRFact2\">"
177 " <Parameter name=\"factory\" type=\"string\" value=\"TransPFactory\"/>"
178 " <Parameter name=\"P\" type=\"string\" value=\"myPFact2\"/>"
181 " <ParameterList name=\"myNspFact2\">"
182 " <Parameter name=\"factory\" type=\"string\" value=\"NullspaceFactory\"/>"
183 " <Parameter name=\"Fine level nullspace\" type=\"string\" value=\"Nullspace2\"/>"
184 " <Parameter name=\"Nullspace2\" type=\"string\" value=\"myTentativePFact2\"/>"
187 " <!-- FACTORY MANAGERS -->"
189 " <!-- Multigrid setup for velocity block (A_{00}) -->"
190 " <ParameterList name=\"myFirstGroup\">"
191 " <Parameter name=\"group\" type=\"string\" value=\"FactoryManager\"/>"
192 " <Parameter name=\"A\" type=\"string\" value=\"mySubBlockAFactory1\"/>"
193 " <Parameter name=\"P\" type=\"string\" value=\"myPFact1\"/>"
194 " <Parameter name=\"R\" type=\"string\" value=\"myRFact1\"/>"
195 " <Parameter name=\"Aggregates\" type=\"string\" value=\"myAggFact1\"/>"
196 " <Parameter name=\"Nullspace\" type=\"string\" value=\"myNspFact1\"/>"
197 " <Parameter name=\"CoarseMap\" type=\"string\" value=\"myCoarseMap1\"/>"
200 " <!-- Multigrid setup for pressure block (A_{11}) -->"
201 " <ParameterList name=\"mySecondGroup\">"
202 " <Parameter name=\"group\" type=\"string\" value=\"FactoryManager\"/>"
203 " <Parameter name=\"A\" type=\"string\" value=\"mySubBlockAFactory2\"/>"
204 " <Parameter name=\"P\" type=\"string\" value=\"myPFact2\"/>"
205 " <Parameter name=\"R\" type=\"string\" value=\"myRFact2\"/>"
206 " <Parameter name=\"Aggregates\" type=\"string\" value=\"myAggFact1\"/><!-- reuse aggs from PRESSURE block! -->"
207 " <Parameter name=\"Nullspace\" type=\"string\" value=\"myNspFact2\"/>"
208 " <Parameter name=\"CoarseMap\" type=\"string\" value=\"myCoarseMap2\"/>"
211 " <!-- BLOCK TRANSFER operators -->"
213 " <ParameterList name=\"myBlockedPFact\">"
214 " <Parameter name=\"factory\" type=\"string\" value=\"BlockedPFactory\"/>"
215 " <!-- factory manager for block 1 -->"
216 " <ParameterList name=\"block1\">"
217 " <Parameter name=\"group\" type=\"string\" value=\"myFirstGroup\"/>"
219 " <!-- factory manager for block 2 -->"
220 " <ParameterList name=\"block2\">"
221 " <Parameter name=\"group\" type=\"string\" value=\"mySecondGroup\"/>"
225 " <ParameterList name=\"myBlockedRFact\">"
226 " <Parameter name=\"factory\" type=\"string\" value=\"GenericRFactory\"/>"
227 " <Parameter name=\"P\" type=\"string\" value=\"myBlockedPFact\"/>"
230 " <ParameterList name=\"myBlockedRAPFact\">"
231 " <Parameter name=\"factory\" type=\"string\" value=\"BlockedRAPFactory\"/>"
232 " <Parameter name=\"P\" type=\"string\" value=\"myBlockedPFact\"/>"
233 " <Parameter name=\"R\" type=\"string\" value=\"myBlockedRFact\"/>"
236 " <!-- BLOCK SMOOTHERS -->"
237 " <ParameterList name=\"mySmooFact1\">"
238 " <Parameter name=\"factory\" type=\"string\" value=\"TrilinosSmoother\"/>"
239 " <Parameter name=\"type\" type=\"string\" value=\"RELAXATION\"/>"
240 " <ParameterList name=\"ParameterList\">"
241 " <Parameter name=\"relaxation: type\" type=\"string\" value=\"XXXBlock 1: relaxation: typeYYY\"/>"
242 " <Parameter name=\"relaxation: sweeps\" type=\"int\" value=\"XXXBlock 1: relaxation: sweepsYYY\"/>"
243 " <Parameter name=\"relaxation: damping factor\" type=\"double\" value=\"XXXBlock 1: relaxation: damping factorYYY\"/>"
247 " <ParameterList name=\"mySmooILUFact1\">"
248 " <Parameter name=\"factory\" type=\"string\" value=\"TrilinosSmoother\"/>"
249 " <Parameter name=\"type\" type=\"string\" value=\"ILU\"/>"
250 " <ParameterList name=\"ParameterList\">"
251 " <Parameter name=\"fact: level-of-fill\" type=\"int\" value=\"XXXBlock 1: level-of-fillYYY\"/>"
255 " <ParameterList name=\"mySmooDirectFact1\">"
256 " <Parameter name=\"factory\" type=\"string\" value=\"DirectSolver\"/>"
259 " <ParameterList name=\"mySmooFact2\">"
260 " <Parameter name=\"factory\" type=\"string\" value=\"TrilinosSmoother\"/>"
261 " <Parameter name=\"type\" type=\"string\" value=\"RELAXATION\"/>"
262 " <ParameterList name=\"ParameterList\">"
263 " <Parameter name=\"relaxation: type\" type=\"string\" value=\"XXXBlock 2: relaxation: typeYYY\"/>"
264 " <Parameter name=\"relaxation: sweeps\" type=\"int\" value=\"XXXBlock 2: relaxation: sweepsYYY\"/>"
265 " <Parameter name=\"relaxation: damping factor\" type=\"double\" value=\"XXXBlock 2: relaxation: damping factorYYY\"/>"
269 " <ParameterList name=\"mySmooILUFact2\">"
270 " <Parameter name=\"factory\" type=\"string\" value=\"TrilinosSmoother\"/>"
271 " <Parameter name=\"type\" type=\"string\" value=\"ILU\"/>"
272 " <ParameterList name=\"ParameterList\">"
273 " <Parameter name=\"fact: level-of-fill\" type=\"int\" value=\"XXXBlock 2: level-of-fillYYY\"/>"
277 " <ParameterList name=\"mySmooDirectFact2\">"
278 " <Parameter name=\"factory\" type=\"string\" value=\"DirectSolver\"/>"
281 " <ParameterList name=\"myNSSchurCompFact\">"
282 " <Parameter name=\"factory\" type=\"string\" value=\"SchurComplementFactory\"/>"
283 " <Parameter name=\"omega\" type=\"double\" value=\"1.0\"/>"
284 " <Parameter name=\"lumping\" type=\"bool\" value=\"false\"/>"
287 " <ParameterList name=\"myBlockSmoother\">"
288 " <Parameter name=\"factory\" type=\"string\" value=\"SimpleSmoother\"/>"
289 " <Parameter name=\"Sweeps\" type=\"int\" value=\"1\"/>"
290 " <Parameter name=\"Damping factor\" type=\"double\" value=\"XXXSimple: damping factorYYY\"/>"
291 " <!-- factory manager for block 1 -->"
292 " <ParameterList name=\"block1\">"
293 " <Parameter name=\"A\" type=\"string\" value=\"mySubBlockAFactory1\"/>"
294 " <Parameter name=\"Smoother\" type=\"string\" value=\"XYZSmoother1XYZ\"/>"
296 " <!-- factory manager for block 2 -->"
297 " <ParameterList name=\"block2\">"
298 " <Parameter name=\"A\" type=\"string\" value=\"myNSSchurCompFact\"/>"
299 " <Parameter name=\"Smoother\" type=\"string\" value=\"XYZSmoother2XYZ\"/>"
304 " <!-- end Factories -->"
306 " <!-- Definition of the multigrid preconditioner -->"
307 " <ParameterList name=\"Hierarchy\">"
309 " <Parameter name=\"max levels\" type=\"int\" value=\"XXXmax levelsYYY\"/>"
310 " <Parameter name=\"coarse: max size\" type=\"int\" value=\"XXXcoarse: max sizeYYY\"/>"
311 " <Parameter name=\"verbosity\" type=\"string\" value=\"XXXverbosityYYY\"/>"
313 " <ParameterList name=\"AllLevel\">"
314 " <Parameter name=\"startLevel\" type=\"int\" value=\"0\"/>"
315 " <Parameter name=\"Smoother\" type=\"string\" value=\"myBlockSmoother\"/>"
316 " <Parameter name=\"CoarseSolver\" type=\"string\" value=\"myBlockSmoother\"/>"
317 " <Parameter name=\"P\" type=\"string\" value=\"myBlockedPFact\"/>"
318 " <Parameter name=\"R\" type=\"string\" value=\"myBlockedRFact\"/>"
319 " <Parameter name=\"A\" type=\"string\" value=\"myBlockedRAPFact\"/>"
327 std::string smoother1 = inputParameters.
get<std::string>(
"Block 1: smoother");
328 if (smoother1 ==
"ILU") {
329 this->ReplaceString(finalString,
"XYZSmoother1XYZ",
"mySmooILUFact1");
330 }
else if (smoother1 ==
"Symmetric Gauss-Seidel" || smoother1 ==
"SGS") {
331 this->ReplaceString(finalString,
"XXXBlock 1: relaxation: typeYYY",
"Symmetric Gauss-Seidel");
332 this->ReplaceString(finalString,
"XYZSmoother1XYZ",
"mySmooFact1");
333 }
else if (smoother1 ==
"Symmetric Gauss-Seidel" || smoother1 ==
"GS") {
334 this->ReplaceString(finalString,
"XXXBlock 1: relaxation: typeYYY",
"Gauss-Seidel");
335 this->ReplaceString(finalString,
"XYZSmoother1XYZ",
"mySmooFact1");
336 }
else if (smoother1 ==
"Jacobi") {
337 this->ReplaceString(finalString,
"XXXBlock 1: relaxation: typeYYY",
"Jacobi");
338 this->ReplaceString(finalString,
"XYZSmoother1XYZ",
"mySmooFact1");
339 }
else if (smoother1 ==
"Direct") {
340 this->ReplaceString(finalString,
"XYZSmoother1XYZ",
"mySmooDirectFact1");
342 this->GetOStream(
Errors) <<
"Invalid smoother type for block 1: " << smoother1 <<
". Valid options are: \"SGS\", \"GS\", \"Jacobi\", \"ILU\" or \"Direct\"." << std::endl;
345 std::string smoother2 = inputParameters.
get<std::string>(
"Block 2: smoother");
346 if (smoother2 ==
"ILU") {
347 this->ReplaceString(finalString,
"XYZSmoother2XYZ",
"mySmooILUFact2");
348 }
else if (smoother2 ==
"Symmetric Gauss-Seidel" || smoother2 ==
"SGS") {
349 this->ReplaceString(finalString,
"XXXBlock 2: relaxation: typeYYY",
"Symmetric Gauss-Seidel");
350 this->ReplaceString(finalString,
"XYZSmoother2XYZ",
"mySmooFact2");
351 }
else if (smoother2 ==
"Symmetric Gauss-Seidel" || smoother2 ==
"GS") {
352 this->ReplaceString(finalString,
"XXXBlock 2: relaxation: typeYYY",
"Gauss-Seidel");
353 this->ReplaceString(finalString,
"XYZSmoother2XYZ",
"mySmooFact2");
354 }
else if (smoother2 ==
"Jacobi") {
355 this->ReplaceString(finalString,
"XXXBlock 2: relaxation: typeYYY",
"Jacobi");
356 this->ReplaceString(finalString,
"XYZSmoother2XYZ",
"mySmooFact2");
357 }
else if (smoother2 ==
"Direct") {
358 this->ReplaceString(finalString,
"XYZSmoother2XYZ",
"mySmooDirectFact2");
360 this->GetOStream(
Errors) <<
"Invalid smoother type for block 2: " << smoother2 <<
". Valid options are: \"SGS\", \"GS\", \"Jacobi\", \"ILU\" or \"Direct\"." << std::endl;
363 if (inputParameters.
get<
bool>(
"Block 1: transfer smoothing") ==
true) {
364 this->ReplaceString(finalString,
"XXXBlock 1: prolongatorYYY",
"myPFact1");
365 this->ReplaceString(finalString,
"XXXBlock 1: restrictor YYY",
"myRFact1");
367 this->ReplaceString(finalString,
"XXXBlock 1: prolongatorYYY",
"myTentativePFact1");
368 this->ReplaceString(finalString,
"XXXBlock 1: restrictor YYY",
"myTransPFact1");
370 if (inputParameters.
get<
bool>(
"Block 2: transfer smoothing") ==
true) {
371 this->ReplaceString(finalString,
"XXXBlock 2: prolongatorYYY",
"myPFact2");
372 this->ReplaceString(finalString,
"XXXBlock 2: restrictor YYY",
"myRFact2");
374 this->ReplaceString(finalString,
"XXXBlock 2: prolongatorYYY",
"myTentativePFact2");
375 this->ReplaceString(finalString,
"XXXBlock 2: restrictor YYY",
"myTransPFact2");
383 std::string par_name = inputParameters.
name(it);
384 std::stringstream ss;
385 ss <<
"XXX" << par_name <<
"YYY";
389 this->ReplaceString(finalString,
398 #endif // PACKAGES_MUELU_SRC_INTERFACE_FACADECLASSES_Simple_DEF_HPP_
Teuchos::RCP< Teuchos::ParameterList > SetParameterList(const Teuchos::ParameterList ¶mList)
Set parameter list for FacadeClass interpreter.
const std::string & name() const
FacadeSimple()
Constructor.
ConstIterator end() const
T & get(const std::string &name, T def_value)
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
params_t::ConstIterator ConstIterator
void validateParametersAndSetDefaults(ParameterList const &validParamList, int const depth=1000)
ConstIterator begin() const
const ParameterEntry & entry(ConstIterator i) const
any & getAny(bool activeQry=true)
Exception throws to report errors in the internal logical of the program.
std::string toString(const T &t)