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