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: }