Actual source code: clique.cxx

  1: #include <../src/mat/impls/aij/mpi/clique/matcliqueimpl.h>

  3: /*
  4:   MatConvertToSparseElemental: Convert Petsc aij matrix to sparse elemental matrix

  6:   input:
  7: +   A     - matrix in seqaij or mpiaij format
  8: -   reuse - denotes if the destination matrix is to be created or reused.
  9:             Use MAT_INPLACE_MATRIX for inplace conversion, otherwise use MAT_INITIAL_MATRIX or MAT_REUSE_MATRIX.

 11:   output:
 12: .   cliq - Clique context
 13: */
 14: PetscErrorCode MatConvertToSparseElemental(Mat A,MatReuse reuse,Mat_SparseElemental *cliq)
 15: {
 16:   return 0;
 17: }

 19: PetscErrorCode MatView_SparseElemental(Mat A,PetscViewer viewer)
 20: {
 21:   PetscBool iascii;

 23:   PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&iascii);
 24:   if (iascii) {
 25:     PetscViewerFormat format;
 26:     PetscViewerGetFormat(viewer,&format);
 27:     if (format == PETSC_VIEWER_ASCII_INFO) {
 28:       PetscViewerASCIIPrintf(viewer,"SparseElemental run parameters:\n");
 29:     } else if (format == PETSC_VIEWER_DEFAULT) { /* matrix A is factored matrix, remove this block */
 30:       Mat Aaij;
 31:       PetscViewerASCIIUseTabs(viewer,PETSC_FALSE);
 32:       PetscViewerASCIIUseTabs(viewer,PETSC_TRUE);
 33:       PetscPrintf(PetscObjectComm((PetscObject)viewer),"SparseElemental matrix\n");
 34:       MatComputeOperator(A,MATAIJ,&Aaij);
 35:       MatView(Aaij,viewer);
 36:       MatDestroy(&Aaij);
 37:     }
 38:   }
 39:   return 0;
 40: }

 42: PetscErrorCode MatDestroy_SparseElemental(Mat A)
 43: {
 44:   PetscObjectComposeFunction((PetscObject)A,"MatFactorGetSolverType_C",NULL);
 45:   return 0;
 46: }

 48: PetscErrorCode MatSolve_SparseElemental(Mat A,Vec B,Vec X)
 49: {
 50:   return 0;
 51: }

 53: PetscErrorCode MatCholeskyFactorNumeric_SparseElemental(Mat F,Mat A,const MatFactorInfo *info)
 54: {
 55:   return 0;
 56: }

 58: PetscErrorCode MatCholeskyFactorSymbolic_SparseElemental(Mat F,Mat A,IS r,const MatFactorInfo *info)
 59: {
 60:   return 0;
 61: }

 63: /*MC
 64:      MATSOLVERSPARSEELEMENTAL  - A solver package providing direct solvers for sparse distributed
 65:   and sequential matrices via the external package Elemental

 67:   Use ./configure --download-elemental to have PETSc installed with Elemental

 69:   Use -pc_type lu -pc_factor_mat_solver_type sparseelemental to use this direct solver

 71:   This is currently not supported.

 73:   Developer Note: Jed Brown made the interface for Clique when it was a standalone package. Later Jack Poulson merged and refactored Clique into
 74:   Elemental but since the Clique interface was not tested in PETSc the interface was not updated for the new Elemental interface. Later Barry Smith updated
 75:   all the boilerplate for the Clique interface to SparseElemental but since the solver interface changed dramatically he did not update the code
 76:   that actually calls the SparseElemental solvers. We are waiting on someone who has a need to complete the SparseElemental interface from PETSc.

 78:   Level: beginner

 80: .seealso: PCFactorSetMatSolverType(), MatSolverType

 82: M*/

 84: PetscErrorCode MatFactorGetSolverType_SparseElemental(Mat A,MatSolverType *type)
 85: {
 86:   *type = MATSOLVERSPARSEELEMENTAL;
 87:   return 0;
 88: }

 90: static PetscErrorCode MatGetFactor_aij_sparseelemental(Mat A,MatFactorType ftype,Mat *F)
 91: {
 92:   return 0;
 93: }

 95: PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SparseElemental(void)
 96: {
 97:   MatSolverTypeRegister(MATSOLVERSPARSEELEMENTAL,MATMPIAIJ,MAT_FACTOR_LU,MatGetFactor_aij_sparseelemental);
 98:   return 0;
 99: }