[dune-pdelab] Parallel (block?) preconditioners
Eike Mueller
E.Mueller at bath.ac.uk
Wed Nov 2 13:52:06 CET 2011
Dear dune-pdelab list,
I have modified the overlapping ISTL backend for CG with a SSOR
preconditioner to use an ILU0 preconditioner instead, i.e. I wrote a new
class ISTLBackend_OVLP_CG_ILU0 :
public Dune::PDELab::OVLPScalarProductImplementation<GFS>,
public Dune::PDELab::LinearResultStorage
[...]
The 'apply' method, where the preconditioner is initialised, looks like
this:
void apply(M& A, V& z, W& r, typename V::ElementType reduction)
{
typedef Dune::PDELab::OverlappingOperator<C,M,V,W> POP;
POP pop(c,A);
typedef Dune::PDELab::OVLPScalarProduct<GFS,V> PSP;
PSP psp(*this);
typedef Dune::SeqILU0<M,V,W,1> SeqPrec;
SeqPrec seqprec(A,steps);
typedef
Dune::PDELab::OverlappingWrappedPreconditioner<C,GFS,SeqPrec> WPREC;
WPREC wprec(gfs,seqprec,c,this->parallelHelper());
int verb=0;
if (gfs.gridview().comm().rank()==0) verb=verbose;
Dune::CGSolver<V> solver(pop,psp,wprec,reduction,maxiter,verb);
Dune::InverseOperatorResult stat;
solver.apply(z,r,stat);
res.converged = stat.converged;
res.iterations = stat.iterations;
res.elapsed = stat.elapsed;
res.reduction = stat.reduction;
res.conv_rate = stat.conv_rate;
}
Now, will this create a block preconditioner (i.e. when decomposing the
matrix A into L and U, will it treat entries A_{ij} for which i and j
are owned by different processors as zero) or will this construct the
'full' incomplete LU decomposition? In other words, will the fill
structure of the matrix in a one process run be identical to the
preconditioner in a 4 process run (up to rounding errors etc)?
I guess the same question can be asked for the SSOR preconditioner
(ISTLBackend_OVLP_CG_SSOR), i.e. if I do 5 SSOR smoothing steps, will
each processor relax its local domain 5 times?
Thank you very much,
Eike
More information about the dune-pdelab
mailing list