[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