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