1 #if !defined(CHOLMODIMPL_H_) 2 #define CHOLMODIMPL_H_ 3 4 #include <petscsys.h> 5 6 #if defined(PETSC_USE_COMPLEX) 7 # define CHOLMOD_SCALAR_TYPE CHOLMOD_COMPLEX 8 #else 9 # define CHOLMOD_SCALAR_TYPE CHOLMOD_REAL 10 #endif 11 12 #if defined(PETSC_USE_64BIT_INDICES) 13 # define CHOLMOD_INT_TYPE CHOLMOD_LONG 14 # define cholmod_X_start cholmod_l_start 15 # define cholmod_X_analyze cholmod_l_analyze 16 /* the type casts are needed because PetscInt is long long while SuiteSparse_long is long and compilers warn even when they are identical */ 17 # define cholmod_X_analyze_p(a,b,c,d,f) cholmod_l_analyze_p(a,(SuiteSparse_long *)b,(SuiteSparse_long *)c,d,f) 18 # define cholmod_X_copy cholmod_l_copy 19 # define cholmod_X_factorize cholmod_l_factorize 20 # define cholmod_X_finish cholmod_l_finish 21 # define cholmod_X_free_factor cholmod_l_free_factor 22 # define cholmod_X_free_dense cholmod_l_free_dense 23 # define cholmod_X_resymbol(a,b,c,d,f,e) cholmod_l_resymbol(a,(SuiteSparse_long *)b,c,d,f,e) 24 # define cholmod_X_solve cholmod_l_solve 25 # define cholmod_X_solve2 cholmod_l_solve2 26 #else 27 # define CHOLMOD_INT_TYPE CHOLMOD_INT 28 # define cholmod_X_start cholmod_start 29 # define cholmod_X_analyze cholmod_analyze 30 # define cholmod_X_analyze_p cholmod_analyze_p 31 # define cholmod_X_copy cholmod_copy 32 # define cholmod_X_factorize cholmod_factorize 33 # define cholmod_X_finish cholmod_finish 34 # define cholmod_X_free_factor cholmod_free_factor 35 # define cholmod_X_free_dense cholmod_free_dense 36 # define cholmod_X_resymbol cholmod_resymbol 37 # define cholmod_X_solve cholmod_solve 38 # define cholmod_X_solve2 cholmod_solve2 39 #endif 40 41 EXTERN_C_BEGIN 42 #include <cholmod.h> 43 EXTERN_C_END 44 45 typedef struct { 46 PetscErrorCode (*Wrap)(Mat,PetscBool,cholmod_sparse*,PetscBool*,PetscBool*); 47 cholmod_sparse *matrix; 48 cholmod_factor *factor; 49 cholmod_common *common; 50 PetscBool pack; 51 } Mat_CHOLMOD; 52 53 PETSC_INTERN PetscErrorCode CholmodStart(Mat); 54 PETSC_INTERN PetscErrorCode MatView_CHOLMOD(Mat,PetscViewer); 55 PETSC_INTERN PetscErrorCode MatCholeskyFactorSymbolic_CHOLMOD(Mat,Mat,IS,const MatFactorInfo*); 56 PETSC_INTERN PetscErrorCode MatGetInfo_CHOLMOD(Mat,MatInfoType,MatInfo*); 57 PETSC_INTERN PetscErrorCode MatDestroy_CHOLMOD(Mat); 58 59 #endif /* CHOLMODIMPL_H_ */ 60