MatGetFactor() only sets up the matrix for factorization but does not do any factorization. You need to call
MatCholeskyFactorSymbolic() http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatCholeskyFactorSymbolic.html and MatCholeskyFactorNumeric() http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatCholeskyFactorNumeric.html#MatCholeskyFactorNumeric after MatGetFactor(). Shri ----- Original Message ----- > 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
