Actual source code: dlregisdmdm.c
1: #include <petscao.h>
2: #include <petsc/private/dmlabelimpl.h>
3: #include <petsc/private/dmfieldimpl.h>
4: #include <petsc/private/dmpleximpl.h>
5: #include <petsc/private/dmplextransformimpl.h>
6: #include <petsc/private/petscdsimpl.h>
7: #include <petsc/private/petscfeimpl.h>
8: #include <petsc/private/petscfvimpl.h>
9: #include <petsc/private/dmswarmimpl.h>
10: #include <petsc/private/dmnetworkimpl.h>
12: static PetscBool DMPackageInitialized = PETSC_FALSE;
13: /*@
14: DMFinalizePackage - This function finalizes everything in the `DM` package. It is called
15: from `PetscFinalize()`.
17: Level: developer
19: .seealso: `PetscInitialize()`
20: @*/
21: PetscErrorCode DMFinalizePackage(void)
22: {
23: PetscFunctionBegin;
24: PetscCall(PetscFunctionListDestroy(&DMList));
25: DMPackageInitialized = PETSC_FALSE;
26: DMRegisterAllCalled = PETSC_FALSE;
27: PetscFunctionReturn(PETSC_SUCCESS);
28: }
30: #if PetscDefined(HAVE_HYPRE)
31: PETSC_EXTERN PetscErrorCode MatCreate_HYPREStruct(Mat);
32: PETSC_EXTERN PetscErrorCode MatCreate_HYPRESStruct(Mat);
33: #endif
35: /*@
36: DMInitializePackage - This function initializes everything in the `DM` package. It is called
37: from `PetscDLLibraryRegister_petscdm()` when using dynamic libraries, and on the first call to `DMCreate()`
38: or similar routines when using shared or static libraries.
40: Level: developer
42: Note:
43: This function never needs to be called by PETSc users.
45: .seealso: `PetscInitialize()`
46: @*/
47: PetscErrorCode DMInitializePackage(void)
48: {
49: char logList[256];
50: PetscBool opt, pkg;
52: PetscFunctionBegin;
53: if (DMPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
54: DMPackageInitialized = PETSC_TRUE;
56: /* Register Classes */
57: PetscCall(PetscClassIdRegister("Distributed Mesh", &DM_CLASSID));
58: PetscCall(PetscClassIdRegister("DM Label", &DMLABEL_CLASSID));
59: PetscCall(PetscClassIdRegister("Quadrature", &PETSCQUADRATURE_CLASSID));
60: PetscCall(PetscClassIdRegister("Mesh Transform", &DMPLEXTRANSFORM_CLASSID));
61: PetscCall(PetscClassIdRegister("Swarm Sort Ctx", &DMSWARMSORT_CLASSID));
62: PetscCall(PetscClassIdRegister("Swarm Cell DM", &DMSWARMCELLDM_CLASSID));
64: #if PetscDefined(HAVE_HYPRE)
65: PetscCall(MatRegister(MATHYPRESTRUCT, MatCreate_HYPREStruct));
66: PetscCall(MatRegister(MATHYPRESSTRUCT, MatCreate_HYPRESStruct));
67: #endif
68: PetscCall(PetscSectionSymRegister(PETSCSECTIONSYMLABEL, PetscSectionSymCreate_Label));
70: /* Register Constructors */
71: PetscCall(DMRegisterAll());
72: /* Register Events */
73: PetscCall(PetscLogEventRegister("DMConvert", DM_CLASSID, &DM_Convert));
74: PetscCall(PetscLogEventRegister("DMGlobalToLocal", DM_CLASSID, &DM_GlobalToLocal));
75: PetscCall(PetscLogEventRegister("DMLocalToGlobal", DM_CLASSID, &DM_LocalToGlobal));
76: PetscCall(PetscLogEventRegister("DMLocatePoints", DM_CLASSID, &DM_LocatePoints));
77: PetscCall(PetscLogEventRegister("DMCoarsen", DM_CLASSID, &DM_Coarsen));
78: PetscCall(PetscLogEventRegister("DMRefine", DM_CLASSID, &DM_Refine));
79: PetscCall(PetscLogEventRegister("DMCreateInterp", DM_CLASSID, &DM_CreateInterpolation));
80: PetscCall(PetscLogEventRegister("DMCreateRestrict", DM_CLASSID, &DM_CreateRestriction));
81: PetscCall(PetscLogEventRegister("DMCreateInject", DM_CLASSID, &DM_CreateInjection));
82: PetscCall(PetscLogEventRegister("DMCreateMat", DM_CLASSID, &DM_CreateMatrix));
83: PetscCall(PetscLogEventRegister("DMCreateMassMat", DM_CLASSID, &DM_CreateMassMatrix));
84: PetscCall(PetscLogEventRegister("DMLoad", DM_CLASSID, &DM_Load));
85: PetscCall(PetscLogEventRegister("DMView", DM_CLASSID, &DM_View));
86: PetscCall(PetscLogEventRegister("DMAdaptInterp", DM_CLASSID, &DM_AdaptInterpolator));
87: PetscCall(PetscLogEventRegister("DMProjectFunc", DM_CLASSID, &DM_ProjectFunction));
89: PetscCall(PetscLogEventRegister("DMPlexBuFrCeLi", DM_CLASSID, &DMPLEX_BuildFromCellList));
90: PetscCall(PetscLogEventRegister("DMPlexBuCoFrCeLi", DM_CLASSID, &DMPLEX_BuildCoordinatesFromCellList));
91: PetscCall(PetscLogEventRegister("DMPlexCreateGmsh", DM_CLASSID, &DMPLEX_CreateGmsh));
92: PetscCall(PetscLogEventRegister("DMPlexCrBoxSFC", DM_CLASSID, &DMPLEX_CreateBoxSFC));
93: PetscCall(PetscLogEventRegister("DMPlexCrFromFile", DM_CLASSID, &DMPLEX_CreateFromFile));
94: PetscCall(PetscLogEventRegister("DMPlexCrFromOpts", DM_CLASSID, &DMPLEX_CreateFromOptions));
95: PetscCall(PetscLogEventRegister("Mesh Partition", DM_CLASSID, &DMPLEX_Partition));
96: PetscCall(PetscLogEventRegister("Mesh Migration", DM_CLASSID, &DMPLEX_Migrate));
97: PetscCall(PetscLogEventRegister("DMPlexPartSelf", DM_CLASSID, &DMPLEX_PartSelf));
98: PetscCall(PetscLogEventRegister("DMPlexPartLblInv", DM_CLASSID, &DMPLEX_PartLabelInvert));
99: PetscCall(PetscLogEventRegister("DMPlexPartLblSF", DM_CLASSID, &DMPLEX_PartLabelCreateSF));
100: PetscCall(PetscLogEventRegister("DMPlexPartStrtSF", DM_CLASSID, &DMPLEX_PartStratSF));
101: PetscCall(PetscLogEventRegister("DMPlexPointSF", DM_CLASSID, &DMPLEX_CreatePointSF));
102: PetscCall(PetscLogEventRegister("DMPlexInterp", DM_CLASSID, &DMPLEX_Interpolate));
103: PetscCall(PetscLogEventRegister("DMPlexDistribute", DM_CLASSID, &DMPLEX_Distribute));
104: PetscCall(PetscLogEventRegister("DMPlexDistMS", DM_CLASSID, &DMPLEX_DistributeMultistage));
105: PetscCall(PetscLogEventRegister("DMPlexDistCones", DM_CLASSID, &DMPLEX_DistributeCones));
106: PetscCall(PetscLogEventRegister("DMPlexDistLabels", DM_CLASSID, &DMPLEX_DistributeLabels));
107: PetscCall(PetscLogEventRegister("DMPlexDistSF", DM_CLASSID, &DMPLEX_DistributeSF));
108: PetscCall(PetscLogEventRegister("DMPlexDistOvrlp", DM_CLASSID, &DMPLEX_DistributeOverlap));
109: PetscCall(PetscLogEventRegister("DMPlexDistField", DM_CLASSID, &DMPLEX_DistributeField));
110: PetscCall(PetscLogEventRegister("DMPlexDistData", DM_CLASSID, &DMPLEX_DistributeData));
111: PetscCall(PetscLogEventRegister("DMPlexInterpSF", DM_CLASSID, &DMPLEX_InterpolateSF));
112: PetscCall(PetscLogEventRegister("DMPlexGToNBegin", DM_CLASSID, &DMPLEX_GlobalToNaturalBegin));
113: PetscCall(PetscLogEventRegister("DMPlexGToNEnd", DM_CLASSID, &DMPLEX_GlobalToNaturalEnd));
114: PetscCall(PetscLogEventRegister("DMPlexNToGBegin", DM_CLASSID, &DMPLEX_NaturalToGlobalBegin));
115: PetscCall(PetscLogEventRegister("DMPlexNToGEnd", DM_CLASSID, &DMPLEX_NaturalToGlobalEnd));
116: PetscCall(PetscLogEventRegister("DMPlexStratify", DM_CLASSID, &DMPLEX_Stratify));
117: PetscCall(PetscLogEventRegister("DMPlexSymmetrize", DM_CLASSID, &DMPLEX_Symmetrize));
118: PetscCall(PetscLogEventRegister("DMPlexPrealloc", DM_CLASSID, &DMPLEX_Preallocate));
119: PetscCall(PetscLogEventRegister("DMPlexResidualFE", DM_CLASSID, &DMPLEX_ResidualFEM));
120: PetscCall(PetscLogEventRegister("DMPlexJacobianFE", DM_CLASSID, &DMPLEX_JacobianFEM));
121: PetscCall(PetscLogEventRegister("DMPlexInterpFE", DM_CLASSID, &DMPLEX_InterpolatorFEM));
122: PetscCall(PetscLogEventRegister("DMPlexInjectorFE", DM_CLASSID, &DMPLEX_InjectorFEM));
123: PetscCall(PetscLogEventRegister("DMPlexIntegralFE", DM_CLASSID, &DMPLEX_IntegralFEM));
124: PetscCall(PetscLogEventRegister("DMPlexRebalance", DM_CLASSID, &DMPLEX_RebalanceSharedPoints));
125: PetscCall(PetscLogEventRegister("DMPlexLocatePoints", DM_CLASSID, &DMPLEX_LocatePoints));
126: PetscCall(PetscLogEventRegister("DMPlexTopologyView", DM_CLASSID, &DMPLEX_TopologyView));
127: PetscCall(PetscLogEventRegister("DMPlexLabelsView", DM_CLASSID, &DMPLEX_LabelsView));
128: PetscCall(PetscLogEventRegister("DMPlexCoordinatesView", DM_CLASSID, &DMPLEX_CoordinatesView));
129: PetscCall(PetscLogEventRegister("DMPlexSectionView", DM_CLASSID, &DMPLEX_SectionView));
130: PetscCall(PetscLogEventRegister("DMPlexGlobalVectorView", DM_CLASSID, &DMPLEX_GlobalVectorView));
131: PetscCall(PetscLogEventRegister("DMPlexLocalVectorView", DM_CLASSID, &DMPLEX_LocalVectorView));
132: PetscCall(PetscLogEventRegister("DMPlexTopologyLoad", DM_CLASSID, &DMPLEX_TopologyLoad));
133: #if PetscDefined(HAVE_HDF5)
134: PetscCall(PetscLogEventRegister("DMPlexDistributionView", DM_CLASSID, &DMPLEX_DistributionView));
135: PetscCall(PetscLogEventRegister("DMPlexDistributionLoad", DM_CLASSID, &DMPLEX_DistributionLoad));
136: #endif
137: PetscCall(PetscLogEventRegister("DMPlexLabelsLoad", DM_CLASSID, &DMPLEX_LabelsLoad));
138: PetscCall(PetscLogEventRegister("DMPlexCoordinatesLoad", DM_CLASSID, &DMPLEX_CoordinatesLoad));
139: PetscCall(PetscLogEventRegister("DMPlexSectionLoad", DM_CLASSID, &DMPLEX_SectionLoad));
140: PetscCall(PetscLogEventRegister("DMPlexGlobalVectorLoad", DM_CLASSID, &DMPLEX_GlobalVectorLoad));
141: PetscCall(PetscLogEventRegister("DMPlexLocalVectorLoad", DM_CLASSID, &DMPLEX_LocalVectorLoad));
142: PetscCall(PetscLogEventRegister("DMPlexMetricEnforceSPD", DM_CLASSID, &DMPLEX_MetricEnforceSPD));
143: PetscCall(PetscLogEventRegister("DMPlexMetricNormalize", DM_CLASSID, &DMPLEX_MetricNormalize));
144: PetscCall(PetscLogEventRegister("DMPlexMetricAverage", DM_CLASSID, &DMPLEX_MetricAverage));
145: PetscCall(PetscLogEventRegister("DMPlexMetricIntersect", DM_CLASSID, &DMPLEX_MetricIntersection));
146: PetscCall(PetscLogEventRegister("DMPlexGenerate", DM_CLASSID, &DMPLEX_Generate));
147: PetscCall(PetscLogEventRegister("DMPlexGetLocOff", DM_CLASSID, &DMPLEX_GetLocalOffsets));
149: PetscCall(PetscLogEventRegister("RebalBuildGraph", DM_CLASSID, &DMPLEX_RebalBuildGraph));
150: PetscCall(PetscLogEventRegister("RebalGatherGraph", DM_CLASSID, &DMPLEX_RebalGatherGraph));
151: PetscCall(PetscLogEventRegister("RebalPartition", DM_CLASSID, &DMPLEX_RebalPartition));
152: PetscCall(PetscLogEventRegister("RebalScatterPart", DM_CLASSID, &DMPLEX_RebalScatterPart));
153: PetscCall(PetscLogEventRegister("RebalRewriteSF", DM_CLASSID, &DMPLEX_RebalRewriteSF));
154: PetscCall(PetscLogEventRegister("DMPlexUninterp", DM_CLASSID, &DMPLEX_Uninterpolate));
156: PetscCall(PetscLogEventRegister("DMPlexTrSetUp", DM_CLASSID, &DMPLEXTRANSFORM_SetUp));
157: PetscCall(PetscLogEventRegister("DMPlexTrApply", DM_CLASSID, &DMPLEXTRANSFORM_Apply));
158: PetscCall(PetscLogEventRegister("DMPlexTrSizes", DM_CLASSID, &DMPLEXTRANSFORM_SetConeSizes));
159: PetscCall(PetscLogEventRegister("DMPlexTrCones", DM_CLASSID, &DMPLEXTRANSFORM_SetCones));
160: PetscCall(PetscLogEventRegister("DMPlexTrSF", DM_CLASSID, &DMPLEXTRANSFORM_CreateSF));
161: PetscCall(PetscLogEventRegister("DMPlexTrLabels", DM_CLASSID, &DMPLEXTRANSFORM_CreateLabels));
162: PetscCall(PetscLogEventRegister("DMPlexTrCoords", DM_CLASSID, &DMPLEXTRANSFORM_SetCoordinates));
163: PetscCall(PetscLogEventRegister("DMPlexTrCheck", DM_CLASSID, &DMPLEXTRANSFORM_Check));
165: PetscCall(PetscLogEventRegister("DMSwarmMigrate", DM_CLASSID, &DMSWARM_Migrate));
166: PetscCall(PetscLogEventRegister("DMSwarmDETSetup", DM_CLASSID, &DMSWARM_DataExchangerTopologySetup));
167: PetscCall(PetscLogEventRegister("DMSwarmDExBegin", DM_CLASSID, &DMSWARM_DataExchangerBegin));
168: PetscCall(PetscLogEventRegister("DMSwarmDExEnd", DM_CLASSID, &DMSWARM_DataExchangerEnd));
169: PetscCall(PetscLogEventRegister("DMSwarmDESendCnt", DM_CLASSID, &DMSWARM_DataExchangerSendCount));
170: PetscCall(PetscLogEventRegister("DMSwarmDEPack", DM_CLASSID, &DMSWARM_DataExchangerPack));
171: PetscCall(PetscLogEventRegister("DMSwarmAddPnts", DM_CLASSID, &DMSWARM_AddPoints));
172: PetscCall(PetscLogEventRegister("DMSwarmRmvPnts", DM_CLASSID, &DMSWARM_RemovePoints));
173: PetscCall(PetscLogEventRegister("DMSwarmSort", DM_CLASSID, &DMSWARM_Sort));
174: PetscCall(PetscLogEventRegister("DMSwarmSetSizes", DM_CLASSID, &DMSWARM_SetSizes));
176: PetscCall(PetscLogEventRegister("DMNtLayoutSetUp", DM_CLASSID, &DMNetwork_LayoutSetUp));
177: PetscCall(PetscLogEventRegister("DMNtSetUp", DM_CLASSID, &DMNetwork_SetUpNetwork));
178: PetscCall(PetscLogEventRegister("DMNtDistribute", DM_CLASSID, &DMNetwork_Distribute));
179: /* Process Info */
180: {
181: PetscClassId classids[1];
183: classids[0] = DM_CLASSID;
184: PetscCall(PetscInfoProcessClass("dm", 1, classids));
185: }
187: /* Process summary exclusions */
188: PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
189: if (opt) {
190: PetscCall(PetscStrInList("dm", logList, ',', &pkg));
191: if (pkg) PetscCall(PetscLogEventExcludeClass(DM_CLASSID));
192: }
194: PetscCall(DMGenerateRegisterAll());
195: PetscCall(PetscRegisterFinalize(DMGenerateRegisterDestroy));
196: PetscCall(DMGeomModelRegisterAll());
197: PetscCall(PetscRegisterFinalize(DMGeomModelRegisterDestroy));
198: PetscCall(DMPlexTransformRegisterAll());
199: PetscCall(PetscRegisterFinalize(DMPlexTransformRegisterDestroy));
200: PetscCall(DMLabelRegisterAll());
201: PetscCall(PetscRegisterFinalize(DMLabelRegisterDestroy));
202: PetscCall(PetscRegisterFinalize(DMFinalizePackage));
203: PetscFunctionReturn(PETSC_SUCCESS);
204: }
205: #include <petscfe.h>
207: static PetscBool PetscFEPackageInitialized = PETSC_FALSE;
209: /*@
210: PetscFEFinalizePackage - This function finalizes everything in the `PetscFE` package. It is called
211: from `PetscFinalize()`.
213: Level: developer
215: .seealso: `PetscInitialize()`
216: @*/
217: PetscErrorCode PetscFEFinalizePackage(void)
218: {
219: PetscFunctionBegin;
220: PetscCall(PetscFunctionListDestroy(&PetscSpaceList));
221: PetscCall(PetscFunctionListDestroy(&PetscDualSpaceList));
222: PetscCall(PetscFunctionListDestroy(&PetscFEList));
223: PetscFEPackageInitialized = PETSC_FALSE;
224: PetscSpaceRegisterAllCalled = PETSC_FALSE;
225: PetscDualSpaceRegisterAllCalled = PETSC_FALSE;
226: PetscFERegisterAllCalled = PETSC_FALSE;
227: PetscFunctionReturn(PETSC_SUCCESS);
228: }
230: /*@
231: PetscFEInitializePackage - This function initializes everything in the `PetscFE` package. It is called
232: from `PetscDLLibraryRegister()` when using dynamic libraries, and on the first call to `PetscSpaceCreate()`
233: when using static libraries.
235: Level: developer
237: .seealso: `PetscInitialize()`
238: @*/
239: PetscErrorCode PetscFEInitializePackage(void)
240: {
241: char logList[256];
242: PetscBool opt, pkg;
244: PetscFunctionBegin;
245: if (PetscFEPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
246: PetscFEPackageInitialized = PETSC_TRUE;
248: /* Register Classes */
249: PetscCall(PetscClassIdRegister("Linear Space", &PETSCSPACE_CLASSID));
250: PetscCall(PetscClassIdRegister("Dual Space", &PETSCDUALSPACE_CLASSID));
251: PetscCall(PetscClassIdRegister("FE Space", &PETSCFE_CLASSID));
252: /* Register Constructors */
253: PetscCall(PetscSpaceRegisterAll());
254: PetscCall(PetscDualSpaceRegisterAll());
255: PetscCall(PetscFERegisterAll());
256: /* Register Events */
257: PetscCall(PetscLogEventRegister("DualSpaceSetUp", PETSCDUALSPACE_CLASSID, &PETSCDUALSPACE_SetUp));
258: PetscCall(PetscLogEventRegister("FESetUp", PETSCFE_CLASSID, &PETSCFE_SetUp));
259: /* Process Info */
260: {
261: PetscClassId classids[3];
263: classids[0] = PETSCFE_CLASSID;
264: classids[1] = PETSCSPACE_CLASSID;
265: classids[2] = PETSCDUALSPACE_CLASSID;
266: PetscCall(PetscInfoProcessClass("fe", 1, classids));
267: PetscCall(PetscInfoProcessClass("space", 1, &classids[1]));
268: PetscCall(PetscInfoProcessClass("dualspace", 1, &classids[2]));
269: }
270: /* Process summary exclusions */
271: PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
272: if (opt) {
273: PetscCall(PetscStrInList("fe", logList, ',', &pkg));
274: if (pkg) PetscCall(PetscLogEventExcludeClass(PETSCFE_CLASSID));
275: }
276: /* Register package finalizer */
277: PetscCall(PetscRegisterFinalize(PetscFEFinalizePackage));
278: PetscFunctionReturn(PETSC_SUCCESS);
279: }
280: #include <petscfv.h>
282: static PetscBool PetscFVPackageInitialized = PETSC_FALSE;
284: /*@
285: PetscFVFinalizePackage - This function finalizes everything in the `PetscFV` package. It is called
286: from `PetscFinalize()`.
288: Level: developer
290: .seealso: `PetscInitialize()`
291: @*/
292: PetscErrorCode PetscFVFinalizePackage(void)
293: {
294: PetscFunctionBegin;
295: PetscCall(PetscFunctionListDestroy(&PetscLimiterList));
296: PetscCall(PetscFunctionListDestroy(&PetscFVList));
297: PetscFVPackageInitialized = PETSC_FALSE;
298: PetscFVRegisterAllCalled = PETSC_FALSE;
299: PetscLimiterRegisterAllCalled = PETSC_FALSE;
300: PetscFunctionReturn(PETSC_SUCCESS);
301: }
303: /*@
304: PetscFVInitializePackage - This function initializes everything in the `PetscFV` package. It is called
305: from `PetscDLLibraryRegister()` when using dynamic libraries, and on the first call to `PetscFVCreate()`
306: when using static libraries.
308: Level: developer
310: .seealso: `PetscInitialize()`
311: @*/
312: PetscErrorCode PetscFVInitializePackage(void)
313: {
314: char logList[256];
315: PetscBool opt, pkg;
317: PetscFunctionBegin;
318: if (PetscFVPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
319: PetscFVPackageInitialized = PETSC_TRUE;
321: /* Register Classes */
322: PetscCall(PetscClassIdRegister("FV Space", &PETSCFV_CLASSID));
323: PetscCall(PetscClassIdRegister("Limiter", &PETSCLIMITER_CLASSID));
324: /* Register Constructors */
325: PetscCall(PetscFVRegisterAll());
326: /* Register Events */
327: /* Process Info */
328: {
329: PetscClassId classids[2];
331: classids[0] = PETSCFV_CLASSID;
332: classids[1] = PETSCLIMITER_CLASSID;
333: PetscCall(PetscInfoProcessClass("fv", 1, classids));
334: PetscCall(PetscInfoProcessClass("limiter", 1, &classids[1]));
335: }
336: /* Process summary exclusions */
337: PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
338: if (opt) {
339: PetscCall(PetscStrInList("fv", logList, ',', &pkg));
340: if (pkg) PetscCall(PetscLogEventExcludeClass(PETSCFV_CLASSID));
341: PetscCall(PetscStrInList("limiter", logList, ',', &pkg));
342: if (pkg) PetscCall(PetscLogEventExcludeClass(PETSCLIMITER_CLASSID));
343: }
344: /* Register package finalizer */
345: PetscCall(PetscRegisterFinalize(PetscFVFinalizePackage));
346: PetscFunctionReturn(PETSC_SUCCESS);
347: }
348: #include <petscds.h>
350: static PetscBool PetscDSPackageInitialized = PETSC_FALSE;
352: /*@
353: PetscDSFinalizePackage - This function finalizes everything in the `PetscDS` package. It is called
354: from `PetscFinalize()`.
356: Level: developer
358: .seealso: `PetscInitialize()`
359: @*/
360: PetscErrorCode PetscDSFinalizePackage(void)
361: {
362: PetscFunctionBegin;
363: PetscCall(PetscFunctionListDestroy(&PetscDSList));
364: PetscDSPackageInitialized = PETSC_FALSE;
365: PetscDSRegisterAllCalled = PETSC_FALSE;
366: PetscFunctionReturn(PETSC_SUCCESS);
367: }
369: /*@
370: PetscDSInitializePackage - This function initializes everything in the `PetscDS` package. It is called
371: from `PetscDLLibraryRegister()` when using dynamic libraries, and on the first call to `PetscDSCreate()`
372: when using static libraries.
374: Level: developer
376: .seealso: `PetscInitialize()`
377: @*/
378: PetscErrorCode PetscDSInitializePackage(void)
379: {
380: char logList[256];
381: PetscBool opt, pkg;
383: PetscFunctionBegin;
384: if (PetscDSPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
385: PetscDSPackageInitialized = PETSC_TRUE;
387: /* Register Classes */
388: PetscCall(PetscClassIdRegister("Discrete System", &PETSCDS_CLASSID));
389: PetscCall(PetscClassIdRegister("Weak Form", &PETSCWEAKFORM_CLASSID));
390: /* Register Constructors */
391: PetscCall(PetscDSRegisterAll());
392: /* Register Events */
393: /* Process Info */
394: {
395: PetscClassId classids[1];
397: classids[0] = PETSCDS_CLASSID;
398: PetscCall(PetscInfoProcessClass("ds", 1, classids));
399: }
400: /* Process summary exclusions */
401: PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
402: if (opt) {
403: PetscCall(PetscStrInList("ds", logList, ',', &pkg));
404: if (pkg) PetscCall(PetscLogEventExcludeClass(PETSCDS_CLASSID));
405: }
406: /* Register package finalizer */
407: PetscCall(PetscRegisterFinalize(PetscDSFinalizePackage));
408: PetscFunctionReturn(PETSC_SUCCESS);
409: }
411: #if PetscDefined(HAVE_DYNAMIC_LIBRARIES)
412: /*
413: PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
415: This one registers all the mesh generators and partitioners that are in
416: the basic DM library.
418: */
419: PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void)
420: {
421: PetscFunctionBegin;
422: PetscCall(AOInitializePackage());
423: PetscCall(PetscPartitionerInitializePackage());
424: PetscCall(DMInitializePackage());
425: PetscCall(PetscFEInitializePackage());
426: PetscCall(PetscFVInitializePackage());
427: PetscCall(DMFieldInitializePackage());
428: PetscCall(PetscDSInitializePackage());
429: PetscFunctionReturn(PETSC_SUCCESS);
430: }
432: #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */