Hello everybody!
I have the following orders to solve the system Ax=b:
.
.
.
//////////////////////////////////////////////////////////////
Vector<double> temp1;
temp1.reinit(dof_handler_total.n_dofs());
A.vmult(temp1,x);
temp1*=(-1.0);
temp1+=b;
res=temp1.l2_norm();
cout<<"The residual is: "<<res<<endl;
vector<bool> signature(DIMENSION+1, false);
signature[DIMENSION] = true;
vector<bool> selected_dofs (dof_handler_total.n_dofs(), false);
DoFTools::extract_dofs(dof_handler_total, signature, selected_dofs);
SparseVanka<double> vanka (A, selected_dofs);
SolverControl solver_control (2000,1e-02);
GrowingVectorMemory<Vector<double> > vector_memory;
SolverGMRES<Vector<double> >
my_solver(solver_control,vector_memory,SolverGMRES<Vector<double>
>::AdditionalData());
my_solver.solve (A, x, b,vanka);
std::cout << " " << solver_control.last_step()
<< " GMRES iterations needed to obtain convergence."
<< std::endl;
.
.
.
//////////////////////////////////////////////////////////////
As result I obtain the following message:
.
.
.
//////////////////////////////////////////////////////////////
The residual is: 0.000100338
DEAL:GMRES::Starting value 0.0666412
DEAL:GMRES::Convergence step 16 value 0.00998494
16 GMRES iterations needed to obtain convergence.
DEAL::GrowingVectorMemory:Overall allocated vectors: 18
DEAL::GrowingVectorMemory:Maximum allocated vectors: 18
.
.
.
//////////////////////////////////////////////////////////////
I would like to take the value given behind "DEAL:GMRES::Starting value",
i.e., in this case 0.0666412, in order to change the tolerance of
SolverControl (at the beginning, as it can be seen, the tolerance I put is
1e-02), is there any direct variable or method to get it? Or should I
change the code of "solver_contro.cc" or "solver_gmres.h" (both belonging
to DealII) to obtain this value?
Thanks in advance
Best
Isa
_______________________________________________