xref: /petsc/src/dm/field/interface/dlregisdmfield.c (revision 58d68138c660dfb4e9f5b03334792cd4f2ffd7cc)
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   PetscFunctionBegin;
20   if (DMFieldPackageInitialized) PetscFunctionReturn(0);
21   DMFieldPackageInitialized = PETSC_TRUE;
22 
23   PetscCall(PetscClassIdRegister("Field over DM", &DMFIELD_CLASSID));
24   PetscCall(DMFieldRegisterAll());
25   PetscCall(PetscRegisterFinalize(DMFieldFinalizePackage));
26   PetscFunctionReturn(0);
27 }
28 
29 /*@C
30    DMFieldFinalizePackage - Finalize DMField package, it is called from PetscFinalize()
31 
32    Logically Collective
33 
34    Level: developer
35 
36 .seealso: `DMFieldInitializePackage()`
37 @*/
38 PetscErrorCode DMFieldFinalizePackage(void) {
39   PetscFunctionBegin;
40   PetscCall(PetscFunctionListDestroy(&DMFieldList));
41   DMFieldPackageInitialized = PETSC_FALSE;
42   DMFieldRegisterAllCalled  = PETSC_FALSE;
43   PetscFunctionReturn(0);
44 }
45