[Trilinos-Users] ML trouble

Gunnar Andreas Staff gunnaran at simula.no
Thu Mar 30 01:03:16 MST 2006


I'm using ML as the preconditioner for a conjugated gradient method for
the normal equation

(BA)^TBAx=(BA^T)Bb  (named CGN_ABBA)

where B is the ML inversion og A,

, and comparing it to a standard preconditioned conjugated gradient
method

BAx=Bb

The condition number can be estimated by the tridiagonal Lanczos matrix
generated from the alpha and betas from the solver.

cond(PCG)=sqrt(cond(CGN_ABBA))


The PCG shows nice orderoptimal behaviour, but the CGN_ABBA does not.
This is the results from a 2D Poisson problem with increasing
discretization with ML_Gen_Smoother_SymGaussSeidel as smoother:

-----------------------------------------------------------------------
cond(CGN_ABBA)  cond(PCG)      number of unknown per spatial direction
-----------------------------------------------------------------------
1.00863409929  1.00839966934    4
1.10925531418  1.08941592664    8
1.33217179553  1.17631779641   16
1.70224315533  1.31764728899   32
2.70656407897  1.33522472598   64


The condition number for CGN_ABBA increases exponentially for increasing
spatial discretization. The same thing happens for the Jacobi smoother.

For the CGN_ABBA, the precontitioner is applied twice per iteration. The
question is:

Do ML check the residual during a V-cycle, and abort the full cycle if
the residual is very  small?

This is the only mathematically explanation I can think of, that can
explain this -- this means that B^TB will not be symmetric positive
definite, since the B^T does not go through the same V cycle as B does.

Any suggestion is welcome.

I use the following ML settings:

ML_Set_PrintLevel(20);
ML_Create(&ml, 20);
ML_Init_Amatrix       (ml, 0, n, n, (void *)csr_data);
ML_Set_Amatrix_Getrow (ml, 0, CSR_getrow, NULL, n);
ML_Set_Amatrix_Matvec (ml, 0, CSR_matvec);
A->computeDiag();
ML_Set_Amatrix_Diag   (ml, 0, n, A->diagonal);
ML_Aggregate_Create(&agg_object);
ML_Aggregate_Set_MaxCoarseSize(agg_object, 10);
N_levels = ML_Gen_MGHierarchy_UsingAggregation(ml, 0,
ML_INCREASING,agg_object);
ML_Gen_Smoother_SymGaussSeidel(ml, ML_ALL_LEVELS, ML_BOTH, 1, 1.0);
ML_Gen_Solver    (ml, ML_MGV, 0, N_levels-1);
 

best regards

Gunnar Staff

-- 
************************************************************
* Gunnar Staff              <gunnaran at simula.no>           *
* PhD student               Simula Research Laboratory     *
* Haugenlia 1               http://www.simula.no/~gunnaran *
* 2020 Skedsmokorset                                       *
* NORWAY                    Mob: 915 15 594                *
************************************************************





More information about the Trilinos-Users mailing list