#define PETSCMAT_DLL #include "src/mat/impls/sbaij/seq/sbaij.h" #include "src/inline/ilu.h" /* Version for when blocks are 3 by 3 Using natural ordering */ #undef __FUNCT__ #define __FUNCT__ "MatCholeskyFactorNumeric_SeqSBAIJ_3_NaturalOrdering" PetscErrorCode MatCholeskyFactorNumeric_SeqSBAIJ_3_NaturalOrdering(Mat A,MatFactorInfo *info,Mat *B) { Mat C = *B; Mat_SeqSBAIJ *a = (Mat_SeqSBAIJ*)A->data,*b = (Mat_SeqSBAIJ *)C->data; PetscErrorCode ierr; PetscInt i,j,mbs=a->mbs,*bi=b->i,*bj=b->j; PetscInt *ai,*aj,k,k1,jmin,jmax,*jl,*il,vj,nexti,ili; MatScalar *ba = b->a,*aa,*ap,*dk,*uik; MatScalar *u,*diag,*rtmp,*rtmp_ptr; PetscReal shift = info->shiftinblocks; PetscFunctionBegin; /* initialization */ ierr = PetscMalloc(9*mbs*sizeof(MatScalar),&rtmp);CHKERRQ(ierr); ierr = PetscMemzero(rtmp,9*mbs*sizeof(MatScalar));CHKERRQ(ierr); ierr = PetscMalloc(2*mbs*sizeof(PetscInt),&il);CHKERRQ(ierr); jl = il + mbs; for (i=0; ii; aj = a->j; aa = a->a; /* for each row k */ for (k = 0; kops->solve = MatSolve_SeqSBAIJ_3_NaturalOrdering; C->ops->solvetranspose = MatSolve_SeqSBAIJ_3_NaturalOrdering; C->ops->forwardsolve = MatForwardSolve_SeqSBAIJ_3_NaturalOrdering; C->ops->backwardsolve = MatBackwardSolve_SeqSBAIJ_3_NaturalOrdering; C->assembled = PETSC_TRUE; C->preallocated = PETSC_TRUE; ierr = PetscLogFlops(1.3333*27*b->mbs);CHKERRQ(ierr); /* from inverting diagonal blocks */ PetscFunctionReturn(0); }