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