xref: /petsc/src/dm/interface/dlregisdmdm.c (revision 7cee435b8e855d672dbf6acd28f68995f21e06bd)
1 
2 #include <petsc-private/dmdaimpl.h>
3 #include <petsc-private/dmpleximpl.h>
4 
5 static PetscBool DMPackageInitialized = PETSC_FALSE;
6 #undef __FUNCT__
7 #define __FUNCT__ "DMFinalizePackage"
8 /*@C
9   DMFinalizePackage - This function finalizes everything in the DM package. It is called
10   from PetscFinalize().
11 
12   Level: developer
13 
14 .keywords: AO, initialize, package
15 .seealso: PetscInitialize()
16 @*/
17 PetscErrorCode  DMFinalizePackage(void)
18 {
19   PetscErrorCode ierr;
20 
21   PetscFunctionBegin;
22   ierr = PetscFunctionListDestroy(&DMList);CHKERRQ(ierr);
23   DMPackageInitialized = PETSC_FALSE;
24   DMRegisterAllCalled  = PETSC_FALSE;
25   PetscFunctionReturn(0);
26 }
27 
28 #if defined(PETSC_HAVE_HYPRE)
29 PETSC_EXTERN PetscErrorCode MatCreate_HYPREStruct(Mat);
30 #endif
31 
32 #undef __FUNCT__
33 #define __FUNCT__ "DMInitializePackage"
34 /*@C
35   DMInitializePackage - This function initializes everything in the DM package. It is called
36   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to AOCreate()
37   or DMDACreate() when using static libraries.
38 
39   Level: developer
40 
41 .keywords: AO, initialize, package
42 .seealso: PetscInitialize()
43 @*/
44 PetscErrorCode  DMInitializePackage(void)
45 {
46   char           logList[256];
47   char           *className;
48   PetscBool      opt;
49   PetscErrorCode ierr;
50 
51   PetscFunctionBegin;
52   if (DMPackageInitialized) PetscFunctionReturn(0);
53   DMPackageInitialized = PETSC_TRUE;
54 
55   /* Register Classes */
56   ierr = PetscClassIdRegister("Distributed Mesh",&DM_CLASSID);CHKERRQ(ierr);
57 
58 #if defined(PETSC_HAVE_HYPRE)
59   ierr = MatRegister(MATHYPRESTRUCT, MatCreate_HYPREStruct);CHKERRQ(ierr);
60 #endif
61 
62   /* Register Constructors */
63   ierr = DMRegisterAll();CHKERRQ(ierr);
64   /* Register Events */
65   ierr = PetscLogEventRegister("DMConvert",              DM_CLASSID,&DM_Convert);CHKERRQ(ierr);
66   ierr = PetscLogEventRegister("DMGlobalToLocal",        DM_CLASSID,&DM_GlobalToLocal);CHKERRQ(ierr);
67   ierr = PetscLogEventRegister("DMLocalToGlobal",        DM_CLASSID,&DM_LocalToGlobal);CHKERRQ(ierr);
68 
69   ierr = PetscLogEventRegister("DMDALocalADFunc",        DM_CLASSID,&DMDA_LocalADFunction);CHKERRQ(ierr);
70 
71   ierr = PetscLogEventRegister("DMPlexPartition",        DM_CLASSID,&DMPLEX_Partition);CHKERRQ(ierr);
72   ierr = PetscLogEventRegister("DMPlexDistribute",       DM_CLASSID,&DMPLEX_Distribute);CHKERRQ(ierr);
73   ierr = PetscLogEventRegister("DMPlexDistributeLabels", DM_CLASSID,&DMPLEX_DistributeLabels);CHKERRQ(ierr);
74   ierr = PetscLogEventRegister("DMPlexDistributeSF",     DM_CLASSID,&DMPLEX_DistributeSF);CHKERRQ(ierr);
75   ierr = PetscLogEventRegister("DMPlexStratify",         DM_CLASSID,&DMPLEX_Stratify);CHKERRQ(ierr);
76   ierr = PetscLogEventRegister("DMPlexResidualFEM",      DM_CLASSID,&DMPLEX_ResidualFEM);CHKERRQ(ierr);
77   ierr = PetscLogEventRegister("DMPlexJacobianFEM",      DM_CLASSID,&DMPLEX_JacobianFEM);CHKERRQ(ierr);
78   /* Process info exclusions */
79   ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr);
80   if (opt) {
81     ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr);
82     if (className) {
83       ierr = PetscInfoDeactivateClass(DM_CLASSID);CHKERRQ(ierr);
84     }
85   }
86   /* Process summary exclusions */
87   ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr);
88   if (opt) {
89     ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr);
90     if (className) {
91       ierr = PetscLogEventDeactivateClass(DM_CLASSID);CHKERRQ(ierr);
92     }
93   }
94   ierr = PetscRegisterFinalize(DMFinalizePackage);CHKERRQ(ierr);
95   PetscFunctionReturn(0);
96 }
97 #include <petscfe.h>
98 
99 static PetscBool PetscFEPackageInitialized = PETSC_FALSE;
100 #undef __FUNCT__
101 #define __FUNCT__ "PetscFEFinalizePackage"
102 /*@C
103   PetscFEFinalizePackage - This function finalizes everything in the PetscFE package. It is called
104   from PetscFinalize().
105 
106   Level: developer
107 
108 .keywords: PetscFE, initialize, package
109 .seealso: PetscInitialize()
110 @*/
111 PetscErrorCode PetscFEFinalizePackage(void)
112 {
113   PetscErrorCode ierr;
114 
115   PetscFunctionBegin;
116   ierr = PetscFunctionListDestroy(&PetscSpaceList);CHKERRQ(ierr);
117   ierr = PetscFunctionListDestroy(&PetscDualSpaceList);CHKERRQ(ierr);
118   ierr = PetscFunctionListDestroy(&PetscFEList);CHKERRQ(ierr);
119   PetscFEPackageInitialized       = PETSC_FALSE;
120   PetscSpaceRegisterAllCalled     = PETSC_FALSE;
121   PetscDualSpaceRegisterAllCalled = PETSC_FALSE;
122   PetscFERegisterAllCalled        = PETSC_FALSE;
123   PetscFunctionReturn(0);
124 }
125 
126 #undef __FUNCT__
127 #define __FUNCT__ "PetscFEInitializePackage"
128 /*@C
129   PetscFEInitializePackage - This function initializes everything in the FE package. It is called
130   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscSpaceCreate()
131   when using static libraries.
132 
133   Level: developer
134 
135 .keywords: PetscFE, initialize, package
136 .seealso: PetscInitialize()
137 @*/
138 PetscErrorCode PetscFEInitializePackage(void)
139 {
140   char           logList[256];
141   char          *className;
142   PetscBool      opt;
143   PetscErrorCode ierr;
144 
145   PetscFunctionBegin;
146   if (PetscFEPackageInitialized) PetscFunctionReturn(0);
147   PetscFEPackageInitialized = PETSC_TRUE;
148 
149   /* Register Classes */
150   ierr = PetscClassIdRegister("Linear Space", &PETSCSPACE_CLASSID);CHKERRQ(ierr);
151   ierr = PetscClassIdRegister("Dual Space",   &PETSCDUALSPACE_CLASSID);CHKERRQ(ierr);
152   ierr = PetscClassIdRegister("FE Space",     &PETSCFE_CLASSID);CHKERRQ(ierr);
153 
154   /* Register Constructors */
155   ierr = PetscSpaceRegisterAll();CHKERRQ(ierr);
156   ierr = PetscDualSpaceRegisterAll();CHKERRQ(ierr);
157   ierr = PetscFERegisterAll();CHKERRQ(ierr);
158   /* Register Events */
159   /* Process info exclusions */
160   ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr);
161   if (opt) {
162     ierr = PetscStrstr(logList, "fe", &className);CHKERRQ(ierr);
163     if (className) {
164       ierr = PetscInfoDeactivateClass(PETSCFE_CLASSID);CHKERRQ(ierr);
165     }
166   }
167   /* Process summary exclusions */
168   ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr);
169   if (opt) {
170     ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr);
171     if (className) {
172       ierr = PetscLogEventDeactivateClass(DM_CLASSID);CHKERRQ(ierr);
173     }
174   }
175   ierr = PetscRegisterFinalize(PetscFEFinalizePackage);CHKERRQ(ierr);
176   PetscFunctionReturn(0);
177 }
178 
179 #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
180 #undef __FUNCT__
181 #define __FUNCT__ "PetscDLLibraryRegister_petscdm"
182 /*
183   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
184 
185   This one registers all the mesh generators and partitioners that are in
186   the basic DM library.
187 
188 */
189 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void)
190 {
191   PetscErrorCode ierr;
192 
193   PetscFunctionBegin;
194   ierr = AOInitializePackage();CHKERRQ(ierr);
195   ierr = DMInitializePackage();CHKERRQ(ierr);
196   ierr = PetscFEInitializePackage();CHKERRQ(ierr);
197   PetscFunctionReturn(0);
198 }
199 
200 #endif /* PETSC_USE_DYNAMIC_LIBRARIES */
201