xref: /petsc/src/dm/interface/dlregisdmdm.c (revision 8ebe3e4e9e00d86ece2e9fcd0cc84910b0ad437c)
1 
2 #include <petscao.h>
3 #include <petsc/private/dmlabelimpl.h>
4 #include <petsc/private/dmfieldimpl.h>
5 #include <petsc/private/dmpleximpl.h>
6 #include <petsc/private/dmplextransformimpl.h>
7 #include <petsc/private/petscdsimpl.h>
8 #include <petsc/private/petscfeimpl.h>
9 #include <petsc/private/petscfvimpl.h>
10 #include <petsc/private/dmswarmimpl.h>
11 
12 static PetscBool DMPackageInitialized = PETSC_FALSE;
13 /*@C
14   DMFinalizePackage - This function finalizes everything in the DM package. It is called
15   from PetscFinalize().
16 
17   Level: developer
18 
19 .seealso: PetscInitialize()
20 @*/
21 PetscErrorCode  DMFinalizePackage(void)
22 {
23   PetscErrorCode ierr;
24 
25   PetscFunctionBegin;
26   ierr = PetscFunctionListDestroy(&DMList);CHKERRQ(ierr);
27   DMPackageInitialized = PETSC_FALSE;
28   DMRegisterAllCalled  = PETSC_FALSE;
29   PetscFunctionReturn(0);
30 }
31 
32 #if defined(PETSC_HAVE_HYPRE)
33 PETSC_EXTERN PetscErrorCode MatCreate_HYPREStruct(Mat);
34 PETSC_EXTERN PetscErrorCode MatCreate_HYPRESStruct(Mat);
35 #endif
36 
37 /*@C
38   DMInitializePackage - This function initializes everything in the DM package. It is called
39   from PetscDLLibraryRegister_petscdm() when using dynamic libraries, and on the first call to AOCreate()
40   or DMDACreate() when using shared or static libraries.
41 
42   Level: developer
43 
44 .seealso: PetscInitialize()
45 @*/
46 PetscErrorCode DMInitializePackage(void)
47 {
48   char           logList[256];
49   PetscBool      opt,pkg;
50   PetscErrorCode ierr;
51 
52   PetscFunctionBegin;
53   if (DMPackageInitialized) PetscFunctionReturn(0);
54   DMPackageInitialized = PETSC_TRUE;
55 
56   /* Register Classes */
57   ierr = PetscClassIdRegister("Distributed Mesh",&DM_CLASSID);CHKERRQ(ierr);
58   ierr = PetscClassIdRegister("DM Label",&DMLABEL_CLASSID);CHKERRQ(ierr);
59   ierr = PetscClassIdRegister("Quadrature",&PETSCQUADRATURE_CLASSID);CHKERRQ(ierr);
60   ierr = PetscClassIdRegister("Mesh Transform",&DMPLEXTRANSFORM_CLASSID);CHKERRQ(ierr);
61 
62 #if defined(PETSC_HAVE_HYPRE)
63   ierr = MatRegister(MATHYPRESTRUCT, MatCreate_HYPREStruct);CHKERRQ(ierr);
64   ierr = MatRegister(MATHYPRESSTRUCT, MatCreate_HYPRESStruct);CHKERRQ(ierr);
65 #endif
66   ierr = PetscSectionSymRegister(PETSCSECTIONSYMLABEL,PetscSectionSymCreate_Label);CHKERRQ(ierr);
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   ierr = PetscLogEventRegister("DMLocatePoints",         DM_CLASSID,&DM_LocatePoints);CHKERRQ(ierr);
75   ierr = PetscLogEventRegister("DMCoarsen",              DM_CLASSID,&DM_Coarsen);CHKERRQ(ierr);
76   ierr = PetscLogEventRegister("DMCreateInterp",         DM_CLASSID,&DM_CreateInterpolation);CHKERRQ(ierr);
77   ierr = PetscLogEventRegister("DMCreateRestrict",       DM_CLASSID,&DM_CreateRestriction);CHKERRQ(ierr);
78   ierr = PetscLogEventRegister("DMCreateInject",         DM_CLASSID,&DM_CreateInjection);CHKERRQ(ierr);
79   ierr = PetscLogEventRegister("DMCreateMat",            DM_CLASSID,&DM_CreateMatrix);CHKERRQ(ierr);
80   ierr = PetscLogEventRegister("DMLoad",                 DM_CLASSID,&DM_Load);CHKERRQ(ierr);
81   ierr = PetscLogEventRegister("DMAdaptInterp",          DM_CLASSID,&DM_AdaptInterpolator);CHKERRQ(ierr);
82 
83   ierr = PetscLogEventRegister("DMPlexBuFrCeLi",         DM_CLASSID,&DMPLEX_BuildFromCellList);CHKERRQ(ierr);
84   ierr = PetscLogEventRegister("DMPlexBuCoFrCeLi",       DM_CLASSID,&DMPLEX_BuildCoordinatesFromCellList);CHKERRQ(ierr);
85   ierr = PetscLogEventRegister("DMPlexCreateGmsh",       DM_CLASSID,&DMPLEX_CreateGmsh);CHKERRQ(ierr);
86   ierr = PetscLogEventRegister("DMPlexCrFromFile",       DM_CLASSID,&DMPLEX_CreateFromFile);CHKERRQ(ierr);
87   ierr = PetscLogEventRegister("Mesh Partition",         DM_CLASSID,&DMPLEX_Partition);CHKERRQ(ierr);
88   ierr = PetscLogEventRegister("Mesh Migration",         DM_CLASSID,&DMPLEX_Migrate);CHKERRQ(ierr);
89   ierr = PetscLogEventRegister("DMPlexPartSelf",         DM_CLASSID,&DMPLEX_PartSelf);CHKERRQ(ierr);
90   ierr = PetscLogEventRegister("DMPlexPartLblInv",       DM_CLASSID,&DMPLEX_PartLabelInvert);CHKERRQ(ierr);
91   ierr = PetscLogEventRegister("DMPlexPartLblSF",        DM_CLASSID,&DMPLEX_PartLabelCreateSF);CHKERRQ(ierr);
92   ierr = PetscLogEventRegister("DMPlexPartStrtSF",       DM_CLASSID,&DMPLEX_PartStratSF);CHKERRQ(ierr);
93   ierr = PetscLogEventRegister("DMPlexPointSF",          DM_CLASSID,&DMPLEX_CreatePointSF);CHKERRQ(ierr);
94   ierr = PetscLogEventRegister("DMPlexInterp",           DM_CLASSID,&DMPLEX_Interpolate);CHKERRQ(ierr);
95   ierr = PetscLogEventRegister("DMPlexDistribute",       DM_CLASSID,&DMPLEX_Distribute);CHKERRQ(ierr);
96   ierr = PetscLogEventRegister("DMPlexDistCones",        DM_CLASSID,&DMPLEX_DistributeCones);CHKERRQ(ierr);
97   ierr = PetscLogEventRegister("DMPlexDistLabels",       DM_CLASSID,&DMPLEX_DistributeLabels);CHKERRQ(ierr);
98   ierr = PetscLogEventRegister("DMPlexDistSF",           DM_CLASSID,&DMPLEX_DistributeSF);CHKERRQ(ierr);
99   ierr = PetscLogEventRegister("DMPlexDistOvrlp",        DM_CLASSID,&DMPLEX_DistributeOverlap);CHKERRQ(ierr);
100   ierr = PetscLogEventRegister("DMPlexDistField",        DM_CLASSID,&DMPLEX_DistributeField);CHKERRQ(ierr);
101   ierr = PetscLogEventRegister("DMPlexDistData",         DM_CLASSID,&DMPLEX_DistributeData);CHKERRQ(ierr);
102   ierr = PetscLogEventRegister("DMPlexInterpSF",         DM_CLASSID,&DMPLEX_InterpolateSF);CHKERRQ(ierr);
103   ierr = PetscLogEventRegister("DMPlexGToNBegin",        DM_CLASSID,&DMPLEX_GlobalToNaturalBegin);CHKERRQ(ierr);
104   ierr = PetscLogEventRegister("DMPlexGToNEnd",          DM_CLASSID,&DMPLEX_GlobalToNaturalEnd);CHKERRQ(ierr);
105   ierr = PetscLogEventRegister("DMPlexNToGBegin",        DM_CLASSID,&DMPLEX_NaturalToGlobalBegin);CHKERRQ(ierr);
106   ierr = PetscLogEventRegister("DMPlexNToGEnd",          DM_CLASSID,&DMPLEX_NaturalToGlobalEnd);CHKERRQ(ierr);
107   ierr = PetscLogEventRegister("DMPlexStratify",         DM_CLASSID,&DMPLEX_Stratify);CHKERRQ(ierr);
108   ierr = PetscLogEventRegister("DMPlexSymmetrize",       DM_CLASSID,&DMPLEX_Symmetrize);CHKERRQ(ierr);
109   ierr = PetscLogEventRegister("DMPlexPrealloc",         DM_CLASSID,&DMPLEX_Preallocate);CHKERRQ(ierr);
110   ierr = PetscLogEventRegister("DMPlexResidualFE",       DM_CLASSID,&DMPLEX_ResidualFEM);CHKERRQ(ierr);
111   ierr = PetscLogEventRegister("DMPlexJacobianFE",       DM_CLASSID,&DMPLEX_JacobianFEM);CHKERRQ(ierr);
112   ierr = PetscLogEventRegister("DMPlexInterpFE",         DM_CLASSID,&DMPLEX_InterpolatorFEM);CHKERRQ(ierr);
113   ierr = PetscLogEventRegister("DMPlexInjectorFE",       DM_CLASSID,&DMPLEX_InjectorFEM);CHKERRQ(ierr);
114   ierr = PetscLogEventRegister("DMPlexIntegralFEM",      DM_CLASSID,&DMPLEX_IntegralFEM);CHKERRQ(ierr);
115   ierr = PetscLogEventRegister("DMPlexRebalance",        DM_CLASSID,&DMPLEX_RebalanceSharedPoints);CHKERRQ(ierr);
116   ierr = PetscLogEventRegister("DMPlexLocatePoints",     DM_CLASSID,&DMPLEX_LocatePoints);CHKERRQ(ierr);
117   ierr = PetscLogEventRegister("DMPlexTopologyView",     DM_CLASSID,&DMPLEX_TopologyView);CHKERRQ(ierr);
118   ierr = PetscLogEventRegister("DMPlexLabelsView",       DM_CLASSID,&DMPLEX_LabelsView);CHKERRQ(ierr);
119   ierr = PetscLogEventRegister("DMPlexCoordinatesView",  DM_CLASSID,&DMPLEX_CoordinatesView);CHKERRQ(ierr);
120   ierr = PetscLogEventRegister("DMPlexSectionView",      DM_CLASSID,&DMPLEX_SectionView);CHKERRQ(ierr);
121   ierr = PetscLogEventRegister("DMPlexGlobalVectorView", DM_CLASSID,&DMPLEX_GlobalVectorView);CHKERRQ(ierr);
122   ierr = PetscLogEventRegister("DMPlexLocalVectorView",  DM_CLASSID,&DMPLEX_LocalVectorView);CHKERRQ(ierr);
123   ierr = PetscLogEventRegister("DMPlexTopologyLoad",     DM_CLASSID,&DMPLEX_TopologyLoad);CHKERRQ(ierr);
124   ierr = PetscLogEventRegister("DMPlexLabelsLoad",       DM_CLASSID,&DMPLEX_LabelsLoad);CHKERRQ(ierr);
125   ierr = PetscLogEventRegister("DMPlexCoordinatesLoad",  DM_CLASSID,&DMPLEX_CoordinatesLoad);CHKERRQ(ierr);
126   ierr = PetscLogEventRegister("DMPlexSectionLoad",      DM_CLASSID,&DMPLEX_SectionLoad);CHKERRQ(ierr);
127   ierr = PetscLogEventRegister("DMPlexGlobalVectorLoad", DM_CLASSID,&DMPLEX_GlobalVectorLoad);CHKERRQ(ierr);
128   ierr = PetscLogEventRegister("DMPlexLocalVectorLoad",  DM_CLASSID,&DMPLEX_LocalVectorLoad);CHKERRQ(ierr);
129 
130   ierr = PetscLogEventRegister("DMSwarmMigrate",         DM_CLASSID,&DMSWARM_Migrate);CHKERRQ(ierr);
131   ierr = PetscLogEventRegister("DMSwarmDETSetup",        DM_CLASSID,&DMSWARM_DataExchangerTopologySetup);CHKERRQ(ierr);
132   ierr = PetscLogEventRegister("DMSwarmDExBegin",        DM_CLASSID,&DMSWARM_DataExchangerBegin);CHKERRQ(ierr);
133   ierr = PetscLogEventRegister("DMSwarmDExEnd",          DM_CLASSID,&DMSWARM_DataExchangerEnd);CHKERRQ(ierr);
134   ierr = PetscLogEventRegister("DMSwarmDESendCnt",       DM_CLASSID,&DMSWARM_DataExchangerSendCount);CHKERRQ(ierr);
135   ierr = PetscLogEventRegister("DMSwarmDEPack",          DM_CLASSID,&DMSWARM_DataExchangerPack);CHKERRQ(ierr);
136   ierr = PetscLogEventRegister("DMSwarmAddPnts",         DM_CLASSID,&DMSWARM_AddPoints);CHKERRQ(ierr);
137   ierr = PetscLogEventRegister("DMSwarmRmvPnts",         DM_CLASSID,&DMSWARM_RemovePoints);CHKERRQ(ierr);
138   ierr = PetscLogEventRegister("DMSwarmSort",            DM_CLASSID,&DMSWARM_Sort);CHKERRQ(ierr);
139   ierr = PetscLogEventRegister("DMSwarmSetSizes",        DM_CLASSID,&DMSWARM_SetSizes);CHKERRQ(ierr);
140   /* Process Info */
141   {
142     PetscClassId  classids[1];
143 
144     classids[0] = DM_CLASSID;
145     ierr = PetscInfoProcessClass("dm", 1, classids);CHKERRQ(ierr);
146   }
147 
148   /* Process summary exclusions */
149   ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr);
150   if (opt) {
151     ierr = PetscStrInList("dm",logList,',',&pkg);CHKERRQ(ierr);
152     if (pkg) {ierr = PetscLogEventExcludeClass(DM_CLASSID);CHKERRQ(ierr);}
153   }
154 
155   ierr = DMGenerateRegisterAll();CHKERRQ(ierr);
156   ierr = PetscRegisterFinalize(DMGenerateRegisterDestroy);CHKERRQ(ierr);
157   ierr = DMPlexTransformRegisterAll();CHKERRQ(ierr);
158   ierr = PetscRegisterFinalize(DMPlexTransformRegisterDestroy);CHKERRQ(ierr);
159   ierr = PetscRegisterFinalize(DMFinalizePackage);CHKERRQ(ierr);
160   PetscFunctionReturn(0);
161 }
162 #include <petscfe.h>
163 
164 static PetscBool PetscFEPackageInitialized = PETSC_FALSE;
165 /*@C
166   PetscFEFinalizePackage - This function finalizes everything in the PetscFE package. It is called
167   from PetscFinalize().
168 
169   Level: developer
170 
171 .seealso: PetscInitialize()
172 @*/
173 PetscErrorCode PetscFEFinalizePackage(void)
174 {
175   PetscErrorCode ierr;
176 
177   PetscFunctionBegin;
178   ierr = PetscFunctionListDestroy(&PetscSpaceList);CHKERRQ(ierr);
179   ierr = PetscFunctionListDestroy(&PetscDualSpaceList);CHKERRQ(ierr);
180   ierr = PetscFunctionListDestroy(&PetscFEList);CHKERRQ(ierr);
181   PetscFEPackageInitialized       = PETSC_FALSE;
182   PetscSpaceRegisterAllCalled     = PETSC_FALSE;
183   PetscDualSpaceRegisterAllCalled = PETSC_FALSE;
184   PetscFERegisterAllCalled        = PETSC_FALSE;
185   PetscFunctionReturn(0);
186 }
187 
188 /*@C
189   PetscFEInitializePackage - This function initializes everything in the FE package. It is called
190   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscSpaceCreate()
191   when using static libraries.
192 
193   Level: developer
194 
195 .seealso: PetscInitialize()
196 @*/
197 PetscErrorCode PetscFEInitializePackage(void)
198 {
199   char           logList[256];
200   PetscBool      opt,pkg;
201   PetscErrorCode ierr;
202 
203   PetscFunctionBegin;
204   if (PetscFEPackageInitialized) PetscFunctionReturn(0);
205   PetscFEPackageInitialized = PETSC_TRUE;
206 
207   /* Register Classes */
208   ierr = PetscClassIdRegister("Linear Space", &PETSCSPACE_CLASSID);CHKERRQ(ierr);
209   ierr = PetscClassIdRegister("Dual Space",   &PETSCDUALSPACE_CLASSID);CHKERRQ(ierr);
210   ierr = PetscClassIdRegister("FE Space",     &PETSCFE_CLASSID);CHKERRQ(ierr);
211   /* Register Constructors */
212   ierr = PetscSpaceRegisterAll();CHKERRQ(ierr);
213   ierr = PetscDualSpaceRegisterAll();CHKERRQ(ierr);
214   ierr = PetscFERegisterAll();CHKERRQ(ierr);
215   /* Register Events */
216   ierr = PetscLogEventRegister("DualSpaceSetUp", PETSCDUALSPACE_CLASSID, &PETSCDUALSPACE_SetUp);CHKERRQ(ierr);
217   ierr = PetscLogEventRegister("FESetUp",        PETSCFE_CLASSID,        &PETSCFE_SetUp);CHKERRQ(ierr);
218   /* Process Info */
219   {
220     PetscClassId  classids[3];
221 
222     classids[0] = PETSCFE_CLASSID;
223     classids[1] = PETSCSPACE_CLASSID;
224     classids[2] = PETSCDUALSPACE_CLASSID;
225     ierr = PetscInfoProcessClass("fe", 1, classids);CHKERRQ(ierr);
226     ierr = PetscInfoProcessClass("space", 1, &classids[1]);CHKERRQ(ierr);
227     ierr = PetscInfoProcessClass("dualspace", 1, &classids[2]);CHKERRQ(ierr);
228   }
229   /* Process summary exclusions */
230   ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr);
231   if (opt) {
232     ierr = PetscStrInList("fe",logList,',',&pkg);CHKERRQ(ierr);
233     if (pkg) {ierr = PetscLogEventExcludeClass(PETSCFE_CLASSID);CHKERRQ(ierr);}
234   }
235   /* Register package finalizer */
236   ierr = PetscRegisterFinalize(PetscFEFinalizePackage);CHKERRQ(ierr);
237   PetscFunctionReturn(0);
238 }
239 #include <petscfv.h>
240 
241 static PetscBool PetscFVPackageInitialized = PETSC_FALSE;
242 /*@C
243   PetscFVFinalizePackage - This function finalizes everything in the PetscFV package. It is called
244   from PetscFinalize().
245 
246   Level: developer
247 
248 .seealso: PetscInitialize()
249 @*/
250 PetscErrorCode PetscFVFinalizePackage(void)
251 {
252   PetscErrorCode ierr;
253 
254   PetscFunctionBegin;
255   ierr = PetscFunctionListDestroy(&PetscLimiterList);CHKERRQ(ierr);
256   ierr = PetscFunctionListDestroy(&PetscFVList);CHKERRQ(ierr);
257   PetscFVPackageInitialized     = PETSC_FALSE;
258   PetscFVRegisterAllCalled      = PETSC_FALSE;
259   PetscLimiterRegisterAllCalled = PETSC_FALSE;
260   PetscFunctionReturn(0);
261 }
262 
263 /*@C
264   PetscFVInitializePackage - This function initializes everything in the FV package. It is called
265   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscFVCreate()
266   when using static libraries.
267 
268   Level: developer
269 
270 .seealso: PetscInitialize()
271 @*/
272 PetscErrorCode PetscFVInitializePackage(void)
273 {
274   char           logList[256];
275   PetscBool      opt,pkg;
276   PetscErrorCode ierr;
277 
278   PetscFunctionBegin;
279   if (PetscFVPackageInitialized) PetscFunctionReturn(0);
280   PetscFVPackageInitialized = PETSC_TRUE;
281 
282   /* Register Classes */
283   ierr = PetscClassIdRegister("FV Space", &PETSCFV_CLASSID);CHKERRQ(ierr);
284   ierr = PetscClassIdRegister("Limiter",  &PETSCLIMITER_CLASSID);CHKERRQ(ierr);
285   /* Register Constructors */
286   ierr = PetscFVRegisterAll();CHKERRQ(ierr);
287   /* Register Events */
288   /* Process Info */
289   {
290     PetscClassId  classids[2];
291 
292     classids[0] = PETSCFV_CLASSID;
293     classids[1] = PETSCLIMITER_CLASSID;
294     ierr = PetscInfoProcessClass("fv", 1, classids);CHKERRQ(ierr);
295     ierr = PetscInfoProcessClass("limiter", 1, &classids[1]);CHKERRQ(ierr);
296   }
297   /* Process summary exclusions */
298   ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr);
299   if (opt) {
300     ierr = PetscStrInList("fv",logList,',',&pkg);CHKERRQ(ierr);
301     if (pkg) {ierr = PetscLogEventExcludeClass(PETSCFV_CLASSID);CHKERRQ(ierr);}
302     ierr = PetscStrInList("limiter",logList,',',&pkg);CHKERRQ(ierr);
303     if (pkg) {ierr = PetscLogEventExcludeClass(PETSCLIMITER_CLASSID);CHKERRQ(ierr);}
304   }
305   /* Register package finalizer */
306   ierr = PetscRegisterFinalize(PetscFVFinalizePackage);CHKERRQ(ierr);
307   PetscFunctionReturn(0);
308 }
309 #include <petscds.h>
310 
311 static PetscBool PetscDSPackageInitialized = PETSC_FALSE;
312 /*@C
313   PetscDSFinalizePackage - This function finalizes everything in the PetscDS package. It is called
314   from PetscFinalize().
315 
316   Level: developer
317 
318 .seealso: PetscInitialize()
319 @*/
320 PetscErrorCode PetscDSFinalizePackage(void)
321 {
322   PetscErrorCode ierr;
323 
324   PetscFunctionBegin;
325   ierr = PetscFunctionListDestroy(&PetscDSList);CHKERRQ(ierr);
326   PetscDSPackageInitialized = PETSC_FALSE;
327   PetscDSRegisterAllCalled  = PETSC_FALSE;
328   PetscFunctionReturn(0);
329 }
330 
331 /*@C
332   PetscDSInitializePackage - This function initializes everything in the DS package. It is called
333   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscDSCreate()
334   when using static libraries.
335 
336   Level: developer
337 
338 .seealso: PetscInitialize()
339 @*/
340 PetscErrorCode PetscDSInitializePackage(void)
341 {
342   char           logList[256];
343   PetscBool      opt,pkg;
344   PetscErrorCode ierr;
345 
346   PetscFunctionBegin;
347   if (PetscDSPackageInitialized) PetscFunctionReturn(0);
348   PetscDSPackageInitialized = PETSC_TRUE;
349 
350   /* Register Classes */
351   ierr = PetscClassIdRegister("Discrete System", &PETSCDS_CLASSID);CHKERRQ(ierr);
352   ierr = PetscClassIdRegister("Weak Form",       &PETSCWEAKFORM_CLASSID);CHKERRQ(ierr);
353   /* Register Constructors */
354   ierr = PetscDSRegisterAll();CHKERRQ(ierr);
355   /* Register Events */
356   /* Process Info */
357   {
358     PetscClassId  classids[1];
359 
360     classids[0] = PETSCDS_CLASSID;
361     ierr = PetscInfoProcessClass("ds", 1, classids);CHKERRQ(ierr);
362   }
363   /* Process summary exclusions */
364   ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr);
365   if (opt) {
366     ierr = PetscStrInList("ds",logList,',',&pkg);CHKERRQ(ierr);
367     if (pkg) {ierr = PetscLogEventExcludeClass(PETSCDS_CLASSID);CHKERRQ(ierr);}
368   }
369   /* Register package finalizer */
370   ierr = PetscRegisterFinalize(PetscDSFinalizePackage);CHKERRQ(ierr);
371   PetscFunctionReturn(0);
372 }
373 
374 #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
375 /*
376   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
377 
378   This one registers all the mesh generators and partitioners that are in
379   the basic DM library.
380 
381 */
382 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void)
383 {
384   PetscErrorCode ierr;
385 
386   PetscFunctionBegin;
387   ierr = AOInitializePackage();CHKERRQ(ierr);
388   ierr = PetscPartitionerInitializePackage();CHKERRQ(ierr);
389   ierr = DMInitializePackage();CHKERRQ(ierr);
390   ierr = PetscFEInitializePackage();CHKERRQ(ierr);
391   ierr = PetscFVInitializePackage();CHKERRQ(ierr);
392   ierr = DMFieldInitializePackage();CHKERRQ(ierr);
393   PetscFunctionReturn(0);
394 }
395 
396 #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
397