Cholesky factorization problem

junwang at uwm.edu junwang at uwm.edu
Fri Apr 13 11:11:20 CDT 2007



Hello:
   I have written a test sample program for using the Cholesky Factorization
function, here is the code i wrote, it compiled successfully. But the result is
not correct, is anyone who can help me out? Thank you!
***************************************************************************

#include "petsc.h"
#include "petscmat.h"
#include <iostream.h>
#include <stdlib.h>

int main(int argc,char **args)
{
  PetscErrorCode ierr;
  Mat            mat;
  int ind1[2],ind2[2];
  PetscScalar temp[2*2];
  PetscInt *nnz=new PetscInt[3];

  PetscInitialize(&argc,&args,0,0);
  nnz[0]=2;nnz[1]=1;nnz[1]=1;

  ierr = MatCreateSeqSBAIJ(PETSC_COMM_SELF,2,6,6,0,nnz,&mat);CHKERRQ(ierr);
  ind1[0]=0;ind1[1]=1;
  temp[0]=3;temp[1]=2;temp[2]=0;temp[3]=3;
  ierr = MatSetValues(mat,2,ind1,2,ind1,temp,INSERT_VALUES);CHKERRQ(ierr);
  ind2[0]=4;ind2[1]=5;
  temp[0]=1;temp[1]=1;temp[2]=2;temp[3]=1;
  ierr = MatSetValues(mat,2,ind1,2,ind2,temp,INSERT_VALUES);CHKERRQ(ierr);
  ind1[0]=2;ind1[1]=3;
  temp[0]=4;temp[1]=1;temp[2]=1;temp[3]=5;
  ierr = MatSetValues(mat,2,ind1,2,ind1,temp,INSERT_VALUES);CHKERRQ(ierr);
  ind1[0]=4;ind1[1]=5;
  temp[0]=5;temp[1]=1;temp[2]=1;temp[3]=6;
  ierr = MatSetValues(mat,2,ind1,2,ind1,temp,INSERT_VALUES);CHKERRQ(ierr);

   ierr = MatAssemblyBegin(mat,MAT_FINAL_ASSEMBLY); CHKERRQ(ierr);
   ierr = MatAssemblyEnd(mat,MAT_FINAL_ASSEMBLY); CHKERRQ(ierr);

   MatView(mat,PETSC_VIEWER_STDOUT_SELF);
   // begin cholesky factorization
   IS perm,colp;

   MatGetOrdering(mat,MATORDERING_NATURAL,&perm,&colp);
   ierr = ISDestroy(colp);CHKERRQ(ierr);

   MatFactorInfo info;
   info.fill=1.0;
   Mat result;

   ierr = MatCholeskyFactorSymbolic(mat,perm,&info,&result); CHKERRQ(ierr);
   ierr = MatCholeskyFactorNumeric(mat,&info,&result);CHKERRQ(ierr);
    MatView(result, PETSC_VIEWER_STDOUT_SELF);

   ierr = ISDestroy(perm);CHKERRQ(ierr);
   ierr= MatDestroy(mat);CHKERRQ(ierr);
   PetscFinalize();
   return 0;
}
***************************************************************************

the result given below:
mat:
row0: (0,3),(1,2),(4,1),(5,1)
row1: (0,2),(1,3),(4,2),(5,1)
row2: (2,4),(3,1)
row3: (2,1),(3,5)
row4: (4,5),(5,1)
row5: (4,1),(5,6)
result:
row0: (4,0.2),(5,-0.2)
row1: (4,-0.8) (5, -0.2)
row2:
row3:
row4:
row5:
***************************************************************************

   The matrix is in SBAIJ format, block size is 2, which cholesky factorization
function should i call? really need that for the project! Thank you!

Jun




More information about the petsc-users mailing list