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_DSC(Mat, MatOrderingType, IS *, IS *);
10: PETSC_INTERN PetscErrorCode MatGetOrdering_WBM(Mat, MatOrderingType, IS *, IS *);
11: PETSC_INTERN PetscErrorCode MatGetOrdering_Spectral(Mat, MatOrderingType, IS *, IS *);
12: #if defined(PETSC_HAVE_SUITESPARSE)
13: PETSC_INTERN PetscErrorCode MatGetOrdering_AMD(Mat, MatOrderingType, IS *, IS *);
14: #endif
15: #if defined(PETSC_HAVE_METIS)
16: PETSC_INTERN PetscErrorCode MatGetOrdering_METISND(Mat, MatOrderingType, IS *, IS *);
17: #endif
19: /*@C
20: MatOrderingRegisterAll - Registers all of the matrix
21: reordering routines in PETSc.
23: Not Collective
25: Level: developer
27: Notes:
28: To add a new method to the registry. Copy this routine and
29: modify it to incorporate a call to `MatReorderRegister()` for
30: the new method, after the current list.
32: To prevent all of the methods from being
33: registered and thus save memory, copy this routine and comment out
34: those orderigs you do not wish to include. Make sure that the
35: replacement routine is linked before libpetscmat.a.
37: .seealso: `MatOrderingType`, `MatOrderingRegister()`
38: @*/
39: PetscErrorCode MatOrderingRegisterAll(void)
40: {
41: PetscFunctionBegin;
42: if (MatOrderingRegisterAllCalled) PetscFunctionReturn(PETSC_SUCCESS);
43: MatOrderingRegisterAllCalled = PETSC_TRUE;
45: PetscCall(MatOrderingRegister(MATORDERINGNATURAL, MatGetOrdering_Natural));
46: PetscCall(MatOrderingRegister(MATORDERINGND, MatGetOrdering_ND));
47: PetscCall(MatOrderingRegister(MATORDERING1WD, MatGetOrdering_1WD));
48: PetscCall(MatOrderingRegister(MATORDERINGRCM, MatGetOrdering_RCM));
49: PetscCall(MatOrderingRegister(MATORDERINGQMD, MatGetOrdering_QMD));
50: PetscCall(MatOrderingRegister(MATORDERINGROWLENGTH, MatGetOrdering_RowLength));
51: #if defined(PETSC_HAVE_SUPERLU_DIST)
52: PetscCall(MatOrderingRegister(MATORDERINGWBM, MatGetOrdering_WBM));
53: #endif
54: PetscCall(MatOrderingRegister(MATORDERINGSPECTRAL, MatGetOrdering_Spectral));
55: #if defined(PETSC_HAVE_SUITESPARSE)
56: PetscCall(MatOrderingRegister(MATORDERINGAMD, MatGetOrdering_AMD));
57: #endif
58: #if defined(PETSC_HAVE_METIS)
59: PetscCall(MatOrderingRegister(MATORDERINGMETISND, MatGetOrdering_METISND));
60: #endif
61: PetscFunctionReturn(PETSC_SUCCESS);
62: }