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