1519f805aSKarl Rupp #if !defined(CHOLMODIMPL_H_) 2586621ddSJed Brown #define CHOLMODIMPL_H_ 3586621ddSJed Brown 4586621ddSJed Brown #include <petscsys.h> 5586621ddSJed Brown 6586621ddSJed Brown #if defined(PETSC_USE_COMPLEX) 7586621ddSJed Brown # define CHOLMOD_SCALAR_TYPE CHOLMOD_COMPLEX 8586621ddSJed Brown #else 9586621ddSJed Brown # define CHOLMOD_SCALAR_TYPE CHOLMOD_REAL 10586621ddSJed Brown #endif 11586621ddSJed Brown 12586621ddSJed Brown #if defined(PETSC_USE_64BIT_INDICES) 13586621ddSJed Brown # define CHOLMOD_INT_TYPE CHOLMOD_LONG 14586621ddSJed Brown # define cholmod_X_start cholmod_l_start 15586621ddSJed Brown # define cholmod_X_analyze cholmod_l_analyze 16d755ee67SBarry Smith /* the type casts are needed because PetscInt is long long while SuiteSparse_long is long and compilers warn even when they are identical */ 17d755ee67SBarry Smith # define cholmod_X_analyze_p(a,b,c,d,f) cholmod_l_analyze_p(a,(SuiteSparse_long *)b,(SuiteSparse_long *)c,d,f) 18586621ddSJed Brown # define cholmod_X_copy cholmod_l_copy 19586621ddSJed Brown # define cholmod_X_factorize cholmod_l_factorize 20586621ddSJed Brown # define cholmod_X_finish cholmod_l_finish 21586621ddSJed Brown # define cholmod_X_free_factor cholmod_l_free_factor 22586621ddSJed Brown # define cholmod_X_free_dense cholmod_l_free_dense 23d755ee67SBarry Smith # define cholmod_X_resymbol(a,b,c,d,f,e) cholmod_l_resymbol(a,(SuiteSparse_long *)b,c,d,f,e) 24586621ddSJed Brown # define cholmod_X_solve cholmod_l_solve 25218db3c1SStefano Zampini # define cholmod_X_solve2 cholmod_l_solve2 26*a2fc1e05SToby Isaac # define cholmod_X_check_sparse cholmod_l_check_sparse 27586621ddSJed Brown #else 28586621ddSJed Brown # define CHOLMOD_INT_TYPE CHOLMOD_INT 29586621ddSJed Brown # define cholmod_X_start cholmod_start 30586621ddSJed Brown # define cholmod_X_analyze cholmod_analyze 31586621ddSJed Brown # define cholmod_X_analyze_p cholmod_analyze_p 32586621ddSJed Brown # define cholmod_X_copy cholmod_copy 33586621ddSJed Brown # define cholmod_X_factorize cholmod_factorize 34586621ddSJed Brown # define cholmod_X_finish cholmod_finish 35586621ddSJed Brown # define cholmod_X_free_factor cholmod_free_factor 36586621ddSJed Brown # define cholmod_X_free_dense cholmod_free_dense 37586621ddSJed Brown # define cholmod_X_resymbol cholmod_resymbol 38586621ddSJed Brown # define cholmod_X_solve cholmod_solve 39218db3c1SStefano Zampini # define cholmod_X_solve2 cholmod_solve2 40*a2fc1e05SToby Isaac # define cholmod_X_check_sparse cholmod_check_sparse 41586621ddSJed Brown #endif 42586621ddSJed Brown 43586621ddSJed Brown EXTERN_C_BEGIN 44586621ddSJed Brown #include <cholmod.h> 45*a2fc1e05SToby Isaac #include <SuiteSparseQR_C.h> 46586621ddSJed Brown EXTERN_C_END 47586621ddSJed Brown 48586621ddSJed Brown typedef struct { 49218db3c1SStefano Zampini PetscErrorCode (*Wrap)(Mat,PetscBool,cholmod_sparse*,PetscBool*,PetscBool*); 50586621ddSJed Brown cholmod_sparse *matrix; 51586621ddSJed Brown cholmod_factor *factor; 52586621ddSJed Brown cholmod_common *common; 53*a2fc1e05SToby Isaac SuiteSparseQR_C_factorization *spqrfact; 54ace3abfcSBarry Smith PetscBool pack; 55586621ddSJed Brown } Mat_CHOLMOD; 56586621ddSJed Brown 575a576424SJed Brown PETSC_INTERN PetscErrorCode CholmodStart(Mat); 585a576424SJed Brown PETSC_INTERN PetscErrorCode MatView_CHOLMOD(Mat,PetscViewer); 595a576424SJed Brown PETSC_INTERN PetscErrorCode MatCholeskyFactorSymbolic_CHOLMOD(Mat,Mat,IS,const MatFactorInfo*); 60218db3c1SStefano Zampini PETSC_INTERN PetscErrorCode MatGetInfo_CHOLMOD(Mat,MatInfoType,MatInfo*); 615a576424SJed Brown PETSC_INTERN PetscErrorCode MatDestroy_CHOLMOD(Mat); 62586621ddSJed Brown 63*a2fc1e05SToby Isaac PETSC_INTERN PetscErrorCode VecWrapCholmod(Vec, PetscInt, cholmod_dense *); 64*a2fc1e05SToby Isaac PETSC_INTERN PetscErrorCode VecUnWrapCholmod(Vec, PetscInt, cholmod_dense *); 65*a2fc1e05SToby Isaac PETSC_INTERN PetscErrorCode MatDenseWrapCholmod(Mat, PetscInt, cholmod_dense *); 66*a2fc1e05SToby Isaac PETSC_INTERN PetscErrorCode MatDenseUnWrapCholmod(Mat, PetscInt, cholmod_dense *); 67586621ddSJed Brown #endif /* CHOLMODIMPL_H_ */ 68