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







_______________________________________________

Reply via email to