xref: /petsc/src/dm/interface/dlregisdmdm.c (revision 1b858b308f387faaf0e89c12f7ddbb06ecdc929c)
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(&PetscPartitionerList);CHKERRQ(ierr);
23   ierr = PetscFunctionListDestroy(&DMList);CHKERRQ(ierr);
24   DMPackageInitialized = PETSC_FALSE;
25   DMRegisterAllCalled  = PETSC_FALSE;
26   PetscPartitionerRegisterAllCalled = PETSC_FALSE;
27   PetscFunctionReturn(0);
28 }
29 
30 #if defined(PETSC_HAVE_HYPRE)
31 PETSC_EXTERN PetscErrorCode MatCreate_HYPREStruct(Mat);
32 #endif
33 
34 #undef __FUNCT__
35 #define __FUNCT__ "DMInitializePackage"
36 /*@C
37   DMInitializePackage - This function initializes everything in the DM package. It is called
38   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to AOCreate()
39   or DMDACreate() when using static libraries.
40 
41   Level: developer
42 
43 .keywords: AO, initialize, package
44 .seealso: PetscInitialize()
45 @*/
46 PetscErrorCode  DMInitializePackage(void)
47 {
48   char           logList[256];
49   char           *className;
50   PetscBool      opt;
51   PetscErrorCode ierr;
52 
53   PetscFunctionBegin;
54   if (DMPackageInitialized) PetscFunctionReturn(0);
55   DMPackageInitialized = PETSC_TRUE;
56 
57   /* Register Classes */
58   ierr = PetscClassIdRegister("Distributed Mesh",&DM_CLASSID);CHKERRQ(ierr);
59   ierr = PetscClassIdRegister("GraphPartitioner",&PETSCPARTITIONER_CLASSID);CHKERRQ(ierr);
60 
61 #if defined(PETSC_HAVE_HYPRE)
62   ierr = MatRegister(MATHYPRESTRUCT, MatCreate_HYPREStruct);CHKERRQ(ierr);
63 #endif
64 
65   /* Register Constructors */
66   ierr = DMRegisterAll();CHKERRQ(ierr);
67   /* Register Events */
68   ierr = PetscLogEventRegister("DMConvert",              DM_CLASSID,&DM_Convert);CHKERRQ(ierr);
69   ierr = PetscLogEventRegister("DMGlobalToLocal",        DM_CLASSID,&DM_GlobalToLocal);CHKERRQ(ierr);
70   ierr = PetscLogEventRegister("DMLocalToGlobal",        DM_CLASSID,&DM_LocalToGlobal);CHKERRQ(ierr);
71 
72   ierr = PetscLogEventRegister("DMDALocalADFunc",        DM_CLASSID,&DMDA_LocalADFunction);CHKERRQ(ierr);
73 
74   ierr = PetscLogEventRegister("Mesh Partition",         PETSCPARTITIONER_CLASSID,&PETSCPARTITIONER_Partition);CHKERRQ(ierr);
75   ierr = PetscLogEventRegister("Mesh Migration",         DM_CLASSID,&DMPLEX_Migrate);CHKERRQ(ierr);
76   ierr = PetscLogEventRegister("DMPlexInterp",           DM_CLASSID,&DMPLEX_Interpolate);CHKERRQ(ierr);
77   ierr = PetscLogEventRegister("DMPlexDistribute",       DM_CLASSID,&DMPLEX_Distribute);CHKERRQ(ierr);
78   ierr = PetscLogEventRegister("DMPlexDistCones",        DM_CLASSID,&DMPLEX_DistributeCones);CHKERRQ(ierr);
79   ierr = PetscLogEventRegister("DMPlexDistLabels",       DM_CLASSID,&DMPLEX_DistributeLabels);CHKERRQ(ierr);
80   ierr = PetscLogEventRegister("DMPlexDistribSF",        DM_CLASSID,&DMPLEX_DistributeSF);CHKERRQ(ierr);
81   ierr = PetscLogEventRegister("DMPlexDistribOL",        DM_CLASSID,&DMPLEX_DistributeOverlap);CHKERRQ(ierr);
82   ierr = PetscLogEventRegister("DMPlexDistField",        DM_CLASSID,&DMPLEX_DistributeField);CHKERRQ(ierr);
83   ierr = PetscLogEventRegister("DMPlexDistData",         DM_CLASSID,&DMPLEX_DistributeData);CHKERRQ(ierr);
84   ierr = PetscLogEventRegister("DMPlexStratify",         DM_CLASSID,&DMPLEX_Stratify);CHKERRQ(ierr);
85   ierr = PetscLogEventRegister("DMPlexPrealloc",         DM_CLASSID,&DMPLEX_Preallocate);CHKERRQ(ierr);
86   ierr = PetscLogEventRegister("DMPlexResidualFE",       DM_CLASSID,&DMPLEX_ResidualFEM);CHKERRQ(ierr);
87   ierr = PetscLogEventRegister("DMPlexJacobianFE",       DM_CLASSID,&DMPLEX_JacobianFEM);CHKERRQ(ierr);
88   ierr = PetscLogEventRegister("DMPlexInterpFE",         DM_CLASSID,&DMPLEX_InterpolatorFEM);CHKERRQ(ierr);
89   ierr = PetscLogEventRegister("DMPlexInjectorFE",       DM_CLASSID,&DMPLEX_InjectorFEM);CHKERRQ(ierr);
90   /* Process info exclusions */
91   ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr);
92   if (opt) {
93     ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr);
94     if (className) {
95       ierr = PetscInfoDeactivateClass(DM_CLASSID);CHKERRQ(ierr);
96     }
97   }
98   /* Process summary exclusions */
99   ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr);
100   if (opt) {
101     ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr);
102     if (className) {
103       ierr = PetscLogEventDeactivateClass(DM_CLASSID);CHKERRQ(ierr);
104     }
105   }
106   ierr = PetscRegisterFinalize(DMFinalizePackage);CHKERRQ(ierr);
107   PetscFunctionReturn(0);
108 }
109 #include <petscfe.h>
110 
111 static PetscBool PetscFEPackageInitialized = PETSC_FALSE;
112 #undef __FUNCT__
113 #define __FUNCT__ "PetscFEFinalizePackage"
114 /*@C
115   PetscFEFinalizePackage - This function finalizes everything in the PetscFE package. It is called
116   from PetscFinalize().
117 
118   Level: developer
119 
120 .keywords: PetscFE, initialize, package
121 .seealso: PetscInitialize()
122 @*/
123 PetscErrorCode PetscFEFinalizePackage(void)
124 {
125   PetscErrorCode ierr;
126 
127   PetscFunctionBegin;
128   ierr = PetscFunctionListDestroy(&PetscSpaceList);CHKERRQ(ierr);
129   ierr = PetscFunctionListDestroy(&PetscDualSpaceList);CHKERRQ(ierr);
130   ierr = PetscFunctionListDestroy(&PetscFEList);CHKERRQ(ierr);
131   PetscFEPackageInitialized       = PETSC_FALSE;
132   PetscSpaceRegisterAllCalled     = PETSC_FALSE;
133   PetscDualSpaceRegisterAllCalled = PETSC_FALSE;
134   PetscFERegisterAllCalled        = PETSC_FALSE;
135   PetscFunctionReturn(0);
136 }
137 
138 #undef __FUNCT__
139 #define __FUNCT__ "PetscFEInitializePackage"
140 /*@C
141   PetscFEInitializePackage - This function initializes everything in the FE package. It is called
142   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscSpaceCreate()
143   when using static libraries.
144 
145   Level: developer
146 
147 .keywords: PetscFE, initialize, package
148 .seealso: PetscInitialize()
149 @*/
150 PetscErrorCode PetscFEInitializePackage(void)
151 {
152   char           logList[256];
153   char          *className;
154   PetscBool      opt;
155   PetscErrorCode ierr;
156 
157   PetscFunctionBegin;
158   if (PetscFEPackageInitialized) PetscFunctionReturn(0);
159   PetscFEPackageInitialized = PETSC_TRUE;
160 
161   /* Register Classes */
162   ierr = PetscClassIdRegister("Linear Space", &PETSCSPACE_CLASSID);CHKERRQ(ierr);
163   ierr = PetscClassIdRegister("Dual Space",   &PETSCDUALSPACE_CLASSID);CHKERRQ(ierr);
164   ierr = PetscClassIdRegister("FE Space",     &PETSCFE_CLASSID);CHKERRQ(ierr);
165 
166   /* Register Constructors */
167   ierr = PetscSpaceRegisterAll();CHKERRQ(ierr);
168   ierr = PetscDualSpaceRegisterAll();CHKERRQ(ierr);
169   ierr = PetscFERegisterAll();CHKERRQ(ierr);
170   /* Register Events */
171   /* Process info exclusions */
172   ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr);
173   if (opt) {
174     ierr = PetscStrstr(logList, "fe", &className);CHKERRQ(ierr);
175     if (className) {ierr = PetscInfoDeactivateClass(PETSCFE_CLASSID);CHKERRQ(ierr);}
176   }
177   /* Process summary exclusions */
178   ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr);
179   if (opt) {
180     ierr = PetscStrstr(logList, "fe", &className);CHKERRQ(ierr);
181     if (className) {ierr = PetscLogEventDeactivateClass(PETSCFE_CLASSID);CHKERRQ(ierr);}
182   }
183   ierr = PetscRegisterFinalize(PetscFEFinalizePackage);CHKERRQ(ierr);
184   PetscFunctionReturn(0);
185 }
186 #include <petscfv.h>
187 
188 static PetscBool PetscFVPackageInitialized = PETSC_FALSE;
189 #undef __FUNCT__
190 #define __FUNCT__ "PetscFVFinalizePackage"
191 /*@C
192   PetscFVFinalizePackage - This function finalizes everything in the PetscFV package. It is called
193   from PetscFinalize().
194 
195   Level: developer
196 
197 .keywords: PetscFV, initialize, package
198 .seealso: PetscInitialize()
199 @*/
200 PetscErrorCode PetscFVFinalizePackage(void)
201 {
202   PetscErrorCode ierr;
203 
204   PetscFunctionBegin;
205   ierr = PetscFunctionListDestroy(&PetscLimiterList);CHKERRQ(ierr);
206   ierr = PetscFunctionListDestroy(&PetscFVList);CHKERRQ(ierr);
207   PetscFVPackageInitialized     = PETSC_FALSE;
208   PetscFVRegisterAllCalled      = PETSC_FALSE;
209   PetscLimiterRegisterAllCalled = PETSC_FALSE;
210   PetscFunctionReturn(0);
211 }
212 
213 #undef __FUNCT__
214 #define __FUNCT__ "PetscFVInitializePackage"
215 /*@C
216   PetscFVInitializePackage - This function initializes everything in the FV package. It is called
217   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscFVCreate()
218   when using static libraries.
219 
220   Level: developer
221 
222 .keywords: PetscFV, initialize, package
223 .seealso: PetscInitialize()
224 @*/
225 PetscErrorCode PetscFVInitializePackage(void)
226 {
227   char           logList[256];
228   char          *className;
229   PetscBool      opt;
230   PetscErrorCode ierr;
231 
232   PetscFunctionBegin;
233   if (PetscFVPackageInitialized) PetscFunctionReturn(0);
234   PetscFVPackageInitialized = PETSC_TRUE;
235 
236   /* Register Classes */
237   ierr = PetscClassIdRegister("FV Space", &PETSCFV_CLASSID);CHKERRQ(ierr);
238   ierr = PetscClassIdRegister("Limiter",  &PETSCLIMITER_CLASSID);CHKERRQ(ierr);
239 
240   /* Register Constructors */
241   ierr = PetscFVRegisterAll();CHKERRQ(ierr);
242   /* Register Events */
243   /* Process info exclusions */
244   ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr);
245   if (opt) {
246     ierr = PetscStrstr(logList, "fv", &className);CHKERRQ(ierr);
247     if (className) {ierr = PetscInfoDeactivateClass(PETSCFV_CLASSID);CHKERRQ(ierr);}
248     ierr = PetscStrstr(logList, "limiter", &className);CHKERRQ(ierr);
249     if (className) {ierr = PetscInfoDeactivateClass(PETSCLIMITER_CLASSID);CHKERRQ(ierr);}
250   }
251   /* Process summary exclusions */
252   ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr);
253   if (opt) {
254     ierr = PetscStrstr(logList, "fv", &className);CHKERRQ(ierr);
255     if (className) {ierr = PetscLogEventDeactivateClass(PETSCFV_CLASSID);CHKERRQ(ierr);}
256     ierr = PetscStrstr(logList, "limiter", &className);CHKERRQ(ierr);
257     if (className) {ierr = PetscLogEventDeactivateClass(PETSCLIMITER_CLASSID);CHKERRQ(ierr);}
258   }
259   ierr = PetscRegisterFinalize(PetscFVFinalizePackage);CHKERRQ(ierr);
260   PetscFunctionReturn(0);
261 }
262 #include <petscds.h>
263 
264 static PetscBool PetscDSPackageInitialized = PETSC_FALSE;
265 #undef __FUNCT__
266 #define __FUNCT__ "PetscDSFinalizePackage"
267 /*@C
268   PetscDSFinalizePackage - This function finalizes everything in the PetscDS package. It is called
269   from PetscFinalize().
270 
271   Level: developer
272 
273 .keywords: PetscDS, initialize, package
274 .seealso: PetscInitialize()
275 @*/
276 PetscErrorCode PetscDSFinalizePackage(void)
277 {
278   PetscErrorCode ierr;
279 
280   PetscFunctionBegin;
281   ierr = PetscFunctionListDestroy(&PetscDSList);CHKERRQ(ierr);
282   PetscDSPackageInitialized = PETSC_FALSE;
283   PetscDSRegisterAllCalled  = PETSC_FALSE;
284   PetscFunctionReturn(0);
285 }
286 
287 #undef __FUNCT__
288 #define __FUNCT__ "PetscDSInitializePackage"
289 /*@C
290   PetscDSInitializePackage - This function initializes everything in the DS package. It is called
291   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscDSCreate()
292   when using static libraries.
293 
294   Level: developer
295 
296 .keywords: PetscDS, initialize, package
297 .seealso: PetscInitialize()
298 @*/
299 PetscErrorCode PetscDSInitializePackage(void)
300 {
301   char           logList[256];
302   char          *className;
303   PetscBool      opt;
304   PetscErrorCode ierr;
305 
306   PetscFunctionBegin;
307   if (PetscDSPackageInitialized) PetscFunctionReturn(0);
308   PetscDSPackageInitialized = PETSC_TRUE;
309 
310   /* Register Classes */
311   ierr = PetscClassIdRegister("Discrete System", &PETSCDS_CLASSID);CHKERRQ(ierr);
312 
313   /* Register Constructors */
314   ierr = PetscDSRegisterAll();CHKERRQ(ierr);
315   /* Register Events */
316   /* Process info exclusions */
317   ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr);
318   if (opt) {
319     ierr = PetscStrstr(logList, "ds", &className);CHKERRQ(ierr);
320     if (className) {ierr = PetscInfoDeactivateClass(PETSCDS_CLASSID);CHKERRQ(ierr);}
321   }
322   /* Process summary exclusions */
323   ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr);
324   if (opt) {
325     ierr = PetscStrstr(logList, "ds", &className);CHKERRQ(ierr);
326     if (className) {ierr = PetscLogEventDeactivateClass(PETSCDS_CLASSID);CHKERRQ(ierr);}
327   }
328   ierr = PetscRegisterFinalize(PetscDSFinalizePackage);CHKERRQ(ierr);
329   PetscFunctionReturn(0);
330 }
331 
332 #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
333 #undef __FUNCT__
334 #define __FUNCT__ "PetscDLLibraryRegister_petscdm"
335 /*
336   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
337 
338   This one registers all the mesh generators and partitioners that are in
339   the basic DM library.
340 
341 */
342 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void)
343 {
344   PetscErrorCode ierr;
345 
346   PetscFunctionBegin;
347   ierr = AOInitializePackage();CHKERRQ(ierr);
348   ierr = DMInitializePackage();CHKERRQ(ierr);
349   ierr = PetscFEInitializePackage();CHKERRQ(ierr);
350   ierr = PetscFVInitializePackage();CHKERRQ(ierr);
351   PetscFunctionReturn(0);
352 }
353 
354 #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
355