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