This is a way of initializing for rVec;

===================================================================
PETScWrappers::MPI::BlockVector rVec;

std::vector<unsigned int> n_dofs_per_block (2);
for (unsigned int i=0 ; i < n_mpi_processes ; ++i)
{
        n_dofs_per_block[0] += n_dofs_perblock_perprocess[0][i];
        n_dofs_per_block[1] += n_dofs_perblock_perprocess[1][i];
}

std::vector< unsigned int > local_size (2);
for (unsigned int i=0 ; i < 2 ; ++i)
  local_size[i] = n_dofs_perblock_perprocess[i][this_mpi_process];

rVec.reinit (n_dofs_per_block , mpi_communicator , local_size);
rVec.collect_sizes ();
===================================================================

Is that wrong?


On Tue, September 30, 2008 6:04 pm, Wolfgang Bangerth wrote:
>
>> SolverControl        solver_control1
>> (rVec.block(0).size(),1e-8*rVec.block(0).l2_norm());
>> [...]
>> ----------------------------------------------------
>> Exception on processing:
>> Iterative method reported convergence failure in step 1 with residual
>> 31.7698 Aborting!
>> ----------------------------------------------------
>>
>> But, I definitely set up the maximum number of iteration for CG by a
>> rVec.block(0).size().
>
> How do you initialize rVec? I see that rVec is a block vector. If you do
>   rVec.reinit (dof_handler.n_dofs());
> then you create a vector with n_dofs blocks each of size 1, if I remember
> correctly. This probably isn't what you want. But that's just a guess what
> may have gone wrong.
>
> Best
>  W.
>
> -------------------------------------------------------------------------
> Wolfgang Bangerth                email:            [EMAIL PROTECTED]
>                                  www: http://www.math.tamu.edu/~bangerth/
>



_______________________________________________

Reply via email to