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:   Adding new methods:
 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:   Restricting the choices: 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: MatOrderingRegister()
 39: @*/
 40: PetscErrorCode  MatOrderingRegisterAll(void)
 41: {
 42:   if (MatOrderingRegisterAllCalled) return 0;
 43:   MatOrderingRegisterAllCalled = PETSC_TRUE;

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