Date: 2022-03-04T17:37:47+00:00

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: {
     17:   return(0);
     18: }

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

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

     45: PetscErrorCode MatDestroy_SparseElemental(Mat A)
     46: {

     50:   PetscObjectComposeFunction((PetscObject)A,"MatFactorGetSolverType_C",NULL);
     51:   return(0);
     52: }

     54: PetscErrorCode MatSolve_SparseElemental(Mat A,Vec B,Vec X)
     55: {
     57:   return(0);
     58: }

     60: PetscErrorCode MatCholeskyFactorNumeric_SparseElemental(Mat F,Mat A,const MatFactorInfo *info)
     61: {
     63:   return(0);
     64: }

     66: PetscErrorCode MatCholeskyFactorSymbolic_SparseElemental(Mat F,Mat A,IS r,const MatFactorInfo *info)
     67: {
     69:   return(0);
     70: }

     72: /*MC
     73:      MATSOLVERSPARSEELEMENTAL  - A solver package providing direct solvers for sparse distributed
     74:   and sequential matrices via the external package Elemental

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

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

     80:   This is currently not supported.

     82:   Developer Note: Jed Brown made the interface for Clique when it was a standalone package. Later Jack Poulson merged and refactored Clique into
     83:   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
     84:   all the boilerplate for the Clique interface to SparseElemental but since the solver interface changed dramatically he did not update the code
     85:   that actually calls the SparseElemental solvers. We are waiting on someone who has a need to complete the SparseElemental interface from PETSc.

     87:   Level: beginner

     89: .seealso: PCFactorSetMatSolverType(), MatSolverType

     91: M*/

     93: PetscErrorCode MatFactorGetSolverType_SparseElemental(Mat A,MatSolverType *type)
     94: {
     96:   *type = MATSOLVERSPARSEELEMENTAL;
     97:   return(0);
     98: }

    100: static PetscErrorCode MatGetFactor_aij_sparseelemental(Mat A,MatFactorType ftype,Mat *F)
    101: {
    103:   return(0);
    104: }

    106: PETSC_EXTERN PetscErrorCode MatSolverTypeRegister_SparseElemental(void)
    107: {

    111:   MatSolverTypeRegister(MATSOLVERSPARSEELEMENTAL,MATMPIAIJ,MAT_FACTOR_LU,MatGetFactor_aij_sparseelemental);
    112:   return(0);
    113: }