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