84int main(
int argc,
char *argv[]) {
87 MPI_Init(&argc,&argv);
95 Teuchos::ParameterList GaleriList;
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) );
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) );
190 Teuchos::ParameterList List;
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);
int main(int argc, char *argv[])
std::string toString(const int &x)