46 #include "Epetra_ConfigDefs.h" 49 #include "Epetra_MpiComm.h" 51 #include "Epetra_SerialComm.h" 53 #include "Epetra_Comm.h" 54 #include "Epetra_Map.h" 55 #include "Epetra_Time.h" 56 #include "Epetra_BlockMap.h" 57 #include "Epetra_MultiVector.h" 58 #include "Epetra_Vector.h" 59 #include "Epetra_Export.h" 61 #include "Galeri_Maps.h" 62 #include "Galeri_CrsMatrices.h" 66 #include "Teuchos_RefCountPtr.hpp" 73 return std::string(s);
79 return std::string(s);
84 int main(
int argc,
char *argv[]) {
87 MPI_Init(&argc,&argv);
88 Epetra_MpiComm Comm (MPI_COMM_WORLD);
90 Epetra_SerialComm Comm;
96 GaleriList.
set(
"nx", nx);
97 GaleriList.
set(
"ny", nx * Comm.NumProc());
98 GaleriList.
set(
"mx", 1);
99 GaleriList.
set(
"my", Comm.NumProc());
100 Teuchos::RefCountPtr<Epetra_Map> Map =
Teuchos::rcp( Galeri::CreateMap(
"Cartesian2D", Comm, GaleriList) );
101 Teuchos::RefCountPtr<Epetra_CrsMatrix>
A =
Teuchos::rcp( Galeri::CreateCrsMatrix(
"Laplace2D", &*Map, GaleriList) );
102 Teuchos::RefCountPtr<Epetra_MultiVector> LHS =
Teuchos::rcp(
new Epetra_MultiVector(*Map, 1) );
103 Teuchos::RefCountPtr<Epetra_MultiVector>
RHS =
Teuchos::rcp(
new Epetra_MultiVector(*Map, 1) );
104 LHS->PutScalar(0.0);
RHS->Random();
110 const double tol = 1e-5;
111 const int maxIter = 500;
120 solver.SetUserMatrix(&*
A);
121 solver.SetLHS(&*LHS);
122 solver.SetRHS(&*
RHS);
123 solver.SetAztecOption(AZ_solver,AZ_cg);
125 solver.SetAztecOption(AZ_output, 16);
126 solver.Iterate(maxIter,
tol);
128 int Iters = solver.NumIters();
137 double DropTol = 0.3333;
140 Teuchos::RefCountPtr<Ifpack_CrsRick> IC;
143 IC->SetAbsoluteThreshold(0.00123);
144 IC->SetRelativeThreshold(0.9876);
150 IC->Condest(
false,Condest);
152 if( Comm.MyPID() == 0 ) {
153 cout <<
"Condition number estimate (level-of-fill = " 154 << LevelFill <<
") = " << Condest << endl;
158 std::string label =
"Ifpack_CrsRick Preconditioner: LevelFill = " +
toString(LevelFill) +
160 IC->SetLabel(label.c_str());
166 solver.SetUserMatrix(&*
A);
167 solver.SetLHS(&*LHS);
168 solver.SetRHS(&*
RHS);
169 solver.SetAztecOption(AZ_solver,AZ_cg);
170 solver.SetPrecOperator(&*IC);
171 solver.SetAztecOption(AZ_output, 16);
172 solver.Iterate(maxIter,
tol);
174 int RickIters = solver.NumIters();
178 if (RickIters > Iters/2)
188 Teuchos::RefCountPtr<Ifpack_Preconditioner> PrecIC =
Teuchos::rcp( Factory.
Create(
"IC", &*
A) );
204 solver.SetUserMatrix(&*
A);
205 solver.SetLHS(&*LHS);
206 solver.SetRHS(&*
RHS);
207 solver.SetAztecOption(AZ_solver,AZ_cg);
208 solver.SetPrecOperator(&*PrecIC);
209 solver.SetAztecOption(AZ_output, 16);
210 solver.Iterate(maxIter,
tol);
212 int ICIters = solver.NumIters();
216 if (ICIters > Iters/2)
224 Teuchos::RefCountPtr<Ifpack_Preconditioner> PrecICT =
Teuchos::rcp( Factory.
Create(
"ICT", &*
A) );
239 solver.SetUserMatrix(&*
A);
240 solver.SetLHS(&*LHS);
241 solver.SetRHS(&*
RHS);
242 solver.SetAztecOption(AZ_solver,AZ_cg);
243 solver.SetPrecOperator(&*PrecICT);
244 solver.SetAztecOption(AZ_output, 16);
245 solver.Iterate(maxIter,
tol);
247 int ICTIters = solver.NumIters();
251 if (ICTIters > Iters/2)
259 return(EXIT_SUCCESS);
ParameterList & set(std::string const &name, T const &value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
Ifpack_IlukGraph: A class for constructing level filled graphs for use with ILU(k) class precondition...
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Ifpack_CrsRick: A class for constructing and using an incomplete Cholesky (IC) factorization of a giv...
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...
int main(int argc, char *argv[])
std::string toString(const int &x)
#define IFPACK_CHK_ERR(ifpack_err)