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