Dear list,

following advice from this list and petsc documentation (especially 
http://www.mcs.anl.gov/petsc/petsc-current/src/ksp/ksp/examples/tutorials/ex52.c.html
 ), i have the following code:

//---------
                                ierr = KSPCreate( coml,&kspBA);CHKERRQ(ierr);
                                ierr = KSPSetOperators( kspBA, Kt, Kt, 
DIFFERENT_NONZERO_PATTERN);CHKERRQ(ierr);

                                ierr = 
KSPSetType(kspBA,KSPPREONLY);CHKERRQ(ierr);

                                ierr = KSPGetPC(kspBA, &pcba);

                                ierr = PCSetType(pcba, 
PCCHOLESKY);CHKERRQ(ierr);

                                ierr = PCFactorSetMatSolverPackage(pcba, 
MATSOLVERPETSC);CHKERRQ(ierr);
                                ierr = 
PCFactorSetUpMatSolverPackage(pcba);CHKERRQ(ierr);
                                ierr = 
MatGetFactor(Kt,"petsc",MAT_FACTOR_CHOLESKY,&DiagM);CHKERRQ(ierr);
                                ierr = PCFactorGetMatrix(pcba, 
&DiagM);CHKERRQ(ierr);

                                ierr = KSPSetUp(kspBA);CHKERRQ(ierr);
                                //ierr = 
MatView(DiagM,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr);
                                //ierr = 
MatView(DiagM,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr);
                                ierr = VecDuplicate(fin,&diag);CHKERRQ(ierr);
                                ierr = MatGetDiagonal(DiagM,diag);CHKERRQ(ierr);
//-----------

where Kt is a stiffness matrix. I was hoping that PCFactorGetMatrix() makes 
DiagM become D from a LDL^T factorization, but to me it seems as if this is not 
true.

Can anyone clarify?

Regards,
Uwe

Reply via email to