xref: /petsc/src/dm/field/interface/dlregisdmfield.c (revision aca0776feee4da889fbf4f9f3c60ccde70044ebc)
1 #include <petsc/private/dmfieldimpl.h> /*I "petscdmfield.h" I*/
2 
3 PetscClassId DMFIELD_CLASSID;
4 
5 static PetscBool DMFieldPackageInitialized = PETSC_FALSE;
6 
7 PetscBool DMFieldRegisterAllCalled;
8 
9 /*@C
10   DMFieldInitializePackage - Initialize `DMField` package
11 
12   Logically Collective
13 
14   Level: developer
15 
16 .seealso: `DMFieldFinalizePackage()`
17 @*/
18 PetscErrorCode DMFieldInitializePackage(void)
19 {
20   PetscFunctionBegin;
21   if (DMFieldPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
22   DMFieldPackageInitialized = PETSC_TRUE;
23 
24   PetscCall(PetscClassIdRegister("Field over DM", &DMFIELD_CLASSID));
25   PetscCall(DMFieldRegisterAll());
26   PetscCall(PetscRegisterFinalize(DMFieldFinalizePackage));
27   PetscFunctionReturn(PETSC_SUCCESS);
28 }
29 
30 /*@C
31   DMFieldFinalizePackage - Finalize `DMField` package, it is called from `PetscFinalize()`
32 
33   Logically Collective
34 
35   Level: developer
36 
37 .seealso: `DMFieldInitializePackage()`
38 @*/
39 PetscErrorCode DMFieldFinalizePackage(void)
40 {
41   PetscFunctionBegin;
42   PetscCall(PetscFunctionListDestroy(&DMFieldList));
43   DMFieldPackageInitialized = PETSC_FALSE;
44   DMFieldRegisterAllCalled  = PETSC_FALSE;
45   PetscFunctionReturn(PETSC_SUCCESS);
46 }
47