Actual source code: sregis.c


  2: #include <petsc/private/matimpl.h>

  4: PETSC_INTERN PetscErrorCode MatGetOrdering_Natural(Mat, MatOrderingType, IS *, IS *);
  5: PETSC_INTERN PetscErrorCode MatGetOrdering_ND(Mat, MatOrderingType, IS *, IS *);
  6: PETSC_INTERN PetscErrorCode MatGetOrdering_1WD(Mat, MatOrderingType, IS *, IS *);
  7: PETSC_INTERN PetscErrorCode MatGetOrdering_QMD(Mat, MatOrderingType, IS *, IS *);
  8: PETSC_INTERN PetscErrorCode MatGetOrdering_RCM(Mat, MatOrderingType, IS *, IS *);
  9: PETSC_INTERN PetscErrorCode MatGetOrdering_RowLength(Mat, MatOrderingType, IS *, IS *);
 10: PETSC_INTERN PetscErrorCode MatGetOrdering_DSC(Mat, MatOrderingType, IS *, IS *);
 11: PETSC_INTERN PetscErrorCode MatGetOrdering_WBM(Mat, MatOrderingType, IS *, IS *);
 12: PETSC_INTERN PetscErrorCode MatGetOrdering_Spectral(Mat, MatOrderingType, IS *, IS *);
 13: #if defined(PETSC_HAVE_SUITESPARSE)
 14: PETSC_INTERN PetscErrorCode MatGetOrdering_AMD(Mat, MatOrderingType, IS *, IS *);
 15: #endif
 16: #if defined(PETSC_HAVE_METIS)
 17: PETSC_INTERN PetscErrorCode MatGetOrdering_METISND(Mat, MatOrderingType, IS *, IS *);
 18: #endif

 20: /*@C
 21:   MatOrderingRegisterAll - Registers all of the matrix
 22:   reordering routines in PETSc.

 24:   Not Collective

 26:   Level: developer

 28:   Notes:
 29:   To add a new method to the registry. Copy this routine and
 30:   modify it to incorporate a call to `MatReorderRegister()` for
 31:   the new method, after the current list.

 33:   To prevent all of the methods from being
 34:   registered and thus save memory, copy this routine and comment out
 35:   those orderigs you do not wish to include.  Make sure that the
 36:   replacement routine is linked before libpetscmat.a.

 38: .seealso: `MatOrderingType`, `MatOrderingRegister()`
 39: @*/
 40: PetscErrorCode MatOrderingRegisterAll(void)
 41: {
 42:   PetscFunctionBegin;
 43:   if (MatOrderingRegisterAllCalled) PetscFunctionReturn(PETSC_SUCCESS);
 44:   MatOrderingRegisterAllCalled = PETSC_TRUE;

 46:   PetscCall(MatOrderingRegister(MATORDERINGNATURAL, MatGetOrdering_Natural));
 47:   PetscCall(MatOrderingRegister(MATORDERINGND, MatGetOrdering_ND));
 48:   PetscCall(MatOrderingRegister(MATORDERING1WD, MatGetOrdering_1WD));
 49:   PetscCall(MatOrderingRegister(MATORDERINGRCM, MatGetOrdering_RCM));
 50:   PetscCall(MatOrderingRegister(MATORDERINGQMD, MatGetOrdering_QMD));
 51:   PetscCall(MatOrderingRegister(MATORDERINGROWLENGTH, MatGetOrdering_RowLength));
 52: #if defined(PETSC_HAVE_SUPERLU_DIST)
 53:   PetscCall(MatOrderingRegister(MATORDERINGWBM, MatGetOrdering_WBM));
 54: #endif
 55:   PetscCall(MatOrderingRegister(MATORDERINGSPECTRAL, MatGetOrdering_Spectral));
 56: #if defined(PETSC_HAVE_SUITESPARSE)
 57:   PetscCall(MatOrderingRegister(MATORDERINGAMD, MatGetOrdering_AMD));
 58: #endif
 59: #if defined(PETSC_HAVE_METIS)
 60:   PetscCall(MatOrderingRegister(MATORDERINGMETISND, MatGetOrdering_METISND));
 61: #endif
 62:   PetscFunctionReturn(PETSC_SUCCESS);
 63: }