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