46 #include "Galeri_Maps.h" 47 #include "Galeri_CrsMatrices.h" 48 #include "Galeri_Utils.h" 49 #include "Epetra_MultiVector.h" 51 #include "Teuchos_UnitTestHarness.hpp" 52 #include "Teuchos_RCP.hpp" 53 #include "Epetra_ConfigDefs.h" 54 #include "Epetra_Vector.h" 55 #include "Epetra_RowMatrix.h" 56 #include "Epetra_MultiVector.h" 57 #include "Epetra_CrsMatrix.h" 58 #include "Epetra_Map.h" 61 #include "Epetra_MpiComm.h" 63 #include "Epetra_SerialComm.h" 68 #include "Teuchos_Array.hpp" 84 for(
int i = 0; i <
N; i++){
92 Ifpack_Hypre preconditioner(&Matrix);
93 int rv=preconditioner.Initialize();
101 const double tol = 1e-7;
109 Teuchos::ParameterList GaleriList;
113 GaleriList.set(
"nx", nx);
114 GaleriList.set(
"ny", ny);
119 Map = Galeri::CreateMap(
"Cartesian2D", Comm, GaleriList);
120 Matrix = Galeri::CreateCrsMatrix(
"Biharmonic2D", Map, GaleriList);
123 Teuchos::ParameterList list(
"Preconditioner List");
124 Teuchos::ParameterList precList = list.sublist(
"hypre: Preconditioner functions");
125 precList.set(
"HYPRE_BoomerAMGSetPrintLevel", 1);
126 precList.set(
"HYPRE_BoomerAMGSetCoarsenType", 6);
127 precList.set(
"HYPRE_BoomerAMGSetRelaxType", 6);
128 precList.set(
"HYPRE_BoomerAMGSetNumSweeps", 1);
129 precList.set(
"HYPRE_BoomerAMGSetTol", 0.0);
130 precList.set(
"HYPRE_BoomerAMGSetMaxIter", 1);
131 list.set(
"hypre: Solver",
"PCG");
132 list.set(
"hypre: Preconditioner",
"BoomerAMG");
133 list.set(
"hypre: SolveOrPrecondition",
"Solver");
134 list.set(
"hypre: SetPreconditioner",
true);
137 Ifpack_Hypre preconditioner(Matrix);
138 TEST_EQUALITY(preconditioner.SetParameters(list),0);
139 TEST_EQUALITY(preconditioner.Compute(),0);
145 TEST_EQUALITY(KnownX.Random(),0);
147 TEST_EQUALITY(preconditioner.Apply(KnownX, B),0);
149 TEST_EQUALITY(preconditioner.ApplyInverse(B,X),0);
156 catch (Galeri::Exception& rhs)
158 if (Comm.
MyPID() == 0)
160 cerr <<
"Caught exception: ";
170 const double tol = 1e-7;
178 Teuchos::ParameterList GaleriList;
182 GaleriList.set(
"nx", nx);
183 GaleriList.set(
"ny", ny);
188 Map = Galeri::CreateMap(
"Cartesian2D", Comm, GaleriList);
189 Matrix = Galeri::CreateCrsMatrix(
"Biharmonic2D", Map, GaleriList);
192 Teuchos::ParameterList list(
"Preconditioner List");
194 list.set(
"hypre: Solver",
"PCG");
195 Teuchos::ParameterList solverList = list.sublist(
"hypre: Solver functions");
196 solverList.set(
"HYPRE_PCGSetMaxIter", 1000);
197 solverList.set(
"HYPRE_PCGSetTol",
tol);
198 solverList.set(
"HYPRE_PCGSetTwoNorm", 1);
199 solverList.set(
"HYPRE_PCGSetPrintLevel", 0);
200 solverList.set(
"HYPRE_PCGSetLogging", 1);
201 list.set(
"hypre: Solver functions",solverList);
203 list.set(
"hypre: Preconditioner",
"BoomerAMG");
204 Teuchos::ParameterList precList = list.sublist(
"hypre: Preconditioner functions");
205 precList.set(
"HYPRE_BoomerAMGSetPrintLevel", 1);
206 precList.set(
"HYPRE_BoomerAMGSetCoarsenType", 6);
207 precList.set(
"HYPRE_BoomerAMGSetRelaxType", 6);
208 precList.set(
"HYPRE_BoomerAMGSetNumSweeps", 1);
209 precList.set(
"HYPRE_BoomerAMGSetTol", 0.0);
210 precList.set(
"HYPRE_BoomerAMGSetMaxIter", 1);
211 list.set(
"hypre: Preconditioner functions",precList);
213 list.set(
"hypre: SolveOrPrecondition",
"Solver");
214 list.set(
"hypre: SetPreconditioner",
true);
217 Ifpack_Hypre preconditioner(Matrix);
218 TEST_EQUALITY(preconditioner.SetParameters(list),0);
219 TEST_EQUALITY(preconditioner.Compute(),0);
225 TEST_EQUALITY(KnownX.Random(),0);
227 TEST_EQUALITY(preconditioner.Apply(KnownX, B),0);
229 TEST_EQUALITY(preconditioner.ApplyInverse(B,X),0);
236 catch (Galeri::Exception& rhs)
238 if (Comm.
MyPID() == 0)
240 cerr <<
"Caught exception: ";
250 const double tol = 1
E-7;
261 RCP<Ifpack_Preconditioner> preconditioner= rcp(Factory.
Create(
"Hypre", Crs_Matrix));
262 int rv = preconditioner->Initialize();
274 TEST_EQUALITY(KnownX.Random(), 0);
275 TEST_EQUALITY(preconditioner->Apply(KnownX, B), 0);
277 Teuchos::ParameterList list(
"New List");
278 Teuchos::ParameterList & solverList = list.sublist(
"hypre: Solver functions");
279 solverList.set(
"HYPRE_PCGSetMaxIter", 1000);
280 solverList.set(
"HYPRE_PCGSetTol", 1e-9);
281 solverList.set(
"HYPRE_PCGSetPrintLevel", 0);
282 solverList.set(
"HYPRE_PCGSetLogging", 1);
283 list.set(
"hypre: Solver functions",solverList);
284 list.set(
"hypre: SolveOrPrecondition",
"Solver");
285 list.set(
"hypre: Solver",
"PCG");
286 list.set(
"hypre: Preconditioner",
"ParaSails");
287 list.set(
"hypre: SetPreconditioner",
true);
288 TEST_EQUALITY(preconditioner->SetParameters(list), 0);
289 (
dynamic_cast<Ifpack_Hypre*
> (preconditioner.get()))->SetParameter(
Solver,
PCG);
291 (
dynamic_cast<Ifpack_Hypre*
> (preconditioner.get()))->SetParameter(
Solver, &HYPRE_ParCSRPCGSetMaxIter, 1000);
292 (
dynamic_cast<Ifpack_Hypre*
> (preconditioner.get()))->SetParameter(
Solver, &HYPRE_ParCSRPCGSetTol, 1e-9);
293 (
dynamic_cast<Ifpack_Hypre*
> (preconditioner.get()))->SetParameter(
Solver);
294 (
dynamic_cast<Ifpack_Hypre*
> (preconditioner.get()))->SetParameter(
true);
295 TEST_EQUALITY(preconditioner->Compute(),0);
296 preconditioner->Condest(
Ifpack_Cheap, 1000, 1e-9, Crs_Matrix);
297 TEST_EQUALITY(preconditioner->ApplyInverse(B, X),0);
301 (
dynamic_cast<Ifpack_Hypre*
> (preconditioner.get()))->SetParameter(
Solver, &HYPRE_ParCSRPCGGetNumIterations, &numIters);
302 (
dynamic_cast<Ifpack_Hypre*
> (preconditioner.get()))->SetParameter(
Solver, &HYPRE_ParCSRPCGGetFinalRelativeResidualNorm, &residual);
303 (
dynamic_cast<Ifpack_Hypre*
> (preconditioner.get()))->CallFunctions();
304 if(MyPID == 0) printf(
"It took %d iterations, and achieved %e residual.\n", numIters, residual);
313 int myRank = comm.
MyPID();
342 accMat.
Apply(KnownX, B);
347 const double tol = 1e-7;
348 Teuchos::ParameterList list(
"Preconditioner List");
349 Teuchos::ParameterList & solverList = list.sublist(
"hypre: Solver functions");
350 solverList.set(
"HYPRE_PCGSetMaxIter", 1000);
351 solverList.set(
"HYPRE_PCGSetTol",
tol);
352 solverList.set(
"HYPRE_PCGSetPrintLevel", 0);
353 solverList.set(
"HYPRE_PCGSetLogging", 1);
354 list.set(
"hypre: Solver",
"PCG");
355 list.set(
"hypre: SolveOrPrecondition",
"Solver");
356 list.set(
"hypre: SetPreconditioner",
false);
361 Ifpack_Hypre prec(&accMat);
362 TEST_EQUALITY(prec.SetParameters(list),0);
363 TEST_EQUALITY(prec.Compute(),0);
368 TEST_EQUALITY(prec.ApplyInverse(B,X),0);
379 int myRank = comm.
MyPID();
386 elementList[0] = 2*myRank+1;
387 elementList[1] = 2*myRank;
388 Epetra_Map ncMap(2*numProcs,2,elementList,0,comm);
407 const double tol = 1e-7;
408 Teuchos::ParameterList list(
"Preconditioner List");
409 Teuchos::ParameterList & solverList = list.sublist(
"hypre: Solver functions");
410 solverList.set(
"HYPRE_PCGSetMaxIter", 1000);
411 solverList.set(
"HYPRE_PCGSetTol",
tol);
412 solverList.set(
"HYPRE_PCGSetTwoNorm", 1);
413 solverList.set(
"HYPRE_PCGSetPrintLevel", 2);
414 solverList.set(
"HYPRE_PCGSetLogging", 1);
415 list.set(
"hypre: Solver",
"PCG");
416 list.set(
"hypre: SolveOrPrecondition",
"Solver");
417 list.set(
"hypre: SetPreconditioner",
false);
423 Ifpack_Hypre prec(&accMat);
424 TEST_EQUALITY(prec.SetParameters(list),0);
425 TEST_EQUALITY(prec.Compute(),0);
436 accMat.
Apply(KnownX, B);
441 TEST_EQUALITY(prec.ApplyInverse(B,X),0);
457 int myRank = comm.
MyPID();
463 elementList[0] = myRank;
464 elementList[1] = myRank+numProcs;
465 Epetra_Map badMap(2*numProcs,2,elementList,0,comm);
476 col = myRank+numProcs;
483 const double tol = 1e-7;
484 Teuchos::ParameterList list(
"Preconditioner List");
485 Teuchos::ParameterList & solverList = list.sublist(
"hypre: Solver functions");
486 solverList.set(
"HYPRE_PCGSetMaxIter", 1000);
487 solverList.set(
"HYPRE_PCGSetTol",
tol);
488 solverList.set(
"HYPRE_PCGSetTwoNorm", 1);
489 solverList.set(
"HYPRE_PCGSetPrintLevel", 2);
490 solverList.set(
"HYPRE_PCGSetLogging", 1);
491 list.set(
"hypre: Solver",
"PCG");
492 list.set(
"hypre: SolveOrPrecondition",
"Solver");
493 list.set(
"hypre: SetPreconditioner",
false);
498 Ifpack_Hypre prec(&badMat);
499 TEST_EQUALITY(prec.SetParameters(list),0);
500 TEST_EQUALITY(prec.Compute(),0);
513 TEST_EQUALITY(prec.ApplyInverse(
RHS,X),0);
virtual int InsertGlobalValues(int GlobalRow, int NumEntries, const double *Values, const int *Indices)
bool EquivalentVectors(Epetra_MultiVector &Y1, Epetra_MultiVector &Y2, const double tol)
const Epetra_Comm & Comm() const
virtual int MyPID() const=0
int FillComplete(bool OptimizeDataStorage=true)
TEUCHOS_UNIT_TEST(Ifpack_Hypre, Construct)
virtual void Print(std::ostream &os) const
virtual int NumProc() const=0
static Ifpack_Preconditioner * Create(EPrecType PrecType, Epetra_RowMatrix *Matrix, const int overlap=0, bool overrideSerialDefault=false)
Creates an instance of Ifpack_Preconditioner given the enum value of the preconditioner type (can not...
Epetra_CrsMatrix * newCrsMatrix(int N)
int Apply(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const