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