Actual source code: sregis.c

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

  3: PETSC_INTERN PetscErrorCode MatGetOrdering_Natural(Mat, MatOrderingType, IS *, IS *);
  4: PETSC_INTERN PetscErrorCode MatGetOrdering_ND(Mat, MatOrderingType, IS *, IS *);
  5: PETSC_INTERN PetscErrorCode MatGetOrdering_1WD(Mat, MatOrderingType, IS *, IS *);
  6: PETSC_INTERN PetscErrorCode MatGetOrdering_QMD(Mat, MatOrderingType, IS *, IS *);
  7: PETSC_INTERN PetscErrorCode MatGetOrdering_RCM(Mat, MatOrderingType, IS *, IS *);
  8: PETSC_INTERN PetscErrorCode MatGetOrdering_RowLength(Mat, MatOrderingType, IS *, IS *);
  9: PETSC_INTERN PetscErrorCode MatGetOrdering_WBM(Mat, MatOrderingType, IS *, IS *);
 10: PETSC_INTERN PetscErrorCode MatGetOrdering_Spectral(Mat, MatOrderingType, IS *, IS *);
 11: #if PetscDefined(HAVE_SUITESPARSE)
 12: PETSC_INTERN PetscErrorCode MatGetOrdering_AMD(Mat, MatOrderingType, IS *, IS *);
 13: #endif
 14: #if PetscDefined(HAVE_METIS)
 15: PETSC_INTERN PetscErrorCode MatGetOrdering_METISND(Mat, MatOrderingType, IS *, IS *);
 16: #endif

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

 22:   Not Collective

 24:   Level: developer

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

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

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

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