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 # define cholmod_X_analyze_p cholmod_l_analyze_p 17 # define cholmod_X_copy cholmod_l_copy 18 # define cholmod_X_factorize cholmod_l_factorize 19 # define cholmod_X_finish cholmod_l_finish 20 # define cholmod_X_free_factor cholmod_l_free_factor 21 # define cholmod_X_free_dense cholmod_l_free_dense 22 # define cholmod_X_resymbol cholmod_l_resymbol 23 # define cholmod_X_solve cholmod_l_solve 24 #else 25 # define CHOLMOD_INT_TYPE CHOLMOD_INT 26 # define cholmod_X_start cholmod_start 27 # define cholmod_X_analyze cholmod_analyze 28 # define cholmod_X_analyze_p cholmod_analyze_p 29 # define cholmod_X_copy cholmod_copy 30 # define cholmod_X_factorize cholmod_factorize 31 # define cholmod_X_finish cholmod_finish 32 # define cholmod_X_free_factor cholmod_free_factor 33 # define cholmod_X_free_dense cholmod_free_dense 34 # define cholmod_X_resymbol cholmod_resymbol 35 # define cholmod_X_solve cholmod_solve 36 #endif 37 38 #define UF_long long long 39 #define UF_long_max LONG_LONG_MAX 40 #define UF_long_id "%lld" 41 #undef I /* complex.h defines I=_Complex_I, but cholmod_core.h uses I as a field member */ 42 43 EXTERN_C_BEGIN 44 #include <cholmod.h> 45 EXTERN_C_END 46 47 typedef struct { 48 PetscErrorCode (*Wrap)(Mat,PetscBool ,cholmod_sparse*,PetscBool *); 49 PetscErrorCode (*Destroy)(Mat); 50 cholmod_sparse *matrix; 51 cholmod_factor *factor; 52 cholmod_common *common; 53 PetscBool pack; 54 } Mat_CHOLMOD; 55 56 extern PetscErrorCode CholmodStart(Mat); 57 extern PetscErrorCode MatView_CHOLMOD(Mat,PetscViewer); 58 extern PetscErrorCode MatCholeskyFactorSymbolic_CHOLMOD(Mat,Mat,IS,const MatFactorInfo*); 59 extern PetscErrorCode MatDestroy_CHOLMOD(Mat); 60 61 #endif /* CHOLMODIMPL_H_ */ 62