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