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(PETSC_SUCCESS); 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(PETSC_SUCCESS); 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 PetscCall(PetscLogEventRegister("DMPlexGenerate", DM_CLASSID, &DMPLEX_Generate)); 136 137 PetscCall(PetscLogEventRegister("RebalBuildGraph", DM_CLASSID, &DMPLEX_RebalBuildGraph)); 138 PetscCall(PetscLogEventRegister("RebalGatherGraph", DM_CLASSID, &DMPLEX_RebalGatherGraph)); 139 PetscCall(PetscLogEventRegister("RebalPartition", DM_CLASSID, &DMPLEX_RebalPartition)); 140 PetscCall(PetscLogEventRegister("RebalScatterPart", DM_CLASSID, &DMPLEX_RebalScatterPart)); 141 PetscCall(PetscLogEventRegister("RebalRewriteSF", DM_CLASSID, &DMPLEX_RebalRewriteSF)); 142 143 PetscCall(PetscLogEventRegister("DMSwarmMigrate", DM_CLASSID, &DMSWARM_Migrate)); 144 PetscCall(PetscLogEventRegister("DMSwarmDETSetup", DM_CLASSID, &DMSWARM_DataExchangerTopologySetup)); 145 PetscCall(PetscLogEventRegister("DMSwarmDExBegin", DM_CLASSID, &DMSWARM_DataExchangerBegin)); 146 PetscCall(PetscLogEventRegister("DMSwarmDExEnd", DM_CLASSID, &DMSWARM_DataExchangerEnd)); 147 PetscCall(PetscLogEventRegister("DMSwarmDESendCnt", DM_CLASSID, &DMSWARM_DataExchangerSendCount)); 148 PetscCall(PetscLogEventRegister("DMSwarmDEPack", DM_CLASSID, &DMSWARM_DataExchangerPack)); 149 PetscCall(PetscLogEventRegister("DMSwarmAddPnts", DM_CLASSID, &DMSWARM_AddPoints)); 150 PetscCall(PetscLogEventRegister("DMSwarmRmvPnts", DM_CLASSID, &DMSWARM_RemovePoints)); 151 PetscCall(PetscLogEventRegister("DMSwarmSort", DM_CLASSID, &DMSWARM_Sort)); 152 PetscCall(PetscLogEventRegister("DMSwarmSetSizes", DM_CLASSID, &DMSWARM_SetSizes)); 153 154 PetscCall(PetscLogEventRegister("DMNtLayoutSetUp", DM_CLASSID, &DMNetwork_LayoutSetUp)); 155 PetscCall(PetscLogEventRegister("DMNtSetUp", DM_CLASSID, &DMNetwork_SetUpNetwork)); 156 PetscCall(PetscLogEventRegister("DMNtDistribute", DM_CLASSID, &DMNetwork_Distribute)); 157 /* Process Info */ 158 { 159 PetscClassId classids[1]; 160 161 classids[0] = DM_CLASSID; 162 PetscCall(PetscInfoProcessClass("dm", 1, classids)); 163 } 164 165 /* Process summary exclusions */ 166 PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt)); 167 if (opt) { 168 PetscCall(PetscStrInList("dm", logList, ',', &pkg)); 169 if (pkg) PetscCall(PetscLogEventExcludeClass(DM_CLASSID)); 170 } 171 172 PetscCall(DMGenerateRegisterAll()); 173 PetscCall(PetscRegisterFinalize(DMGenerateRegisterDestroy)); 174 PetscCall(DMPlexTransformRegisterAll()); 175 PetscCall(PetscRegisterFinalize(DMPlexTransformRegisterDestroy)); 176 PetscCall(DMLabelRegisterAll()); 177 PetscCall(PetscRegisterFinalize(DMLabelRegisterDestroy)); 178 PetscCall(PetscRegisterFinalize(DMFinalizePackage)); 179 PetscFunctionReturn(PETSC_SUCCESS); 180 } 181 #include <petscfe.h> 182 183 static PetscBool PetscFEPackageInitialized = PETSC_FALSE; 184 /*@C 185 PetscFEFinalizePackage - This function finalizes everything in the PetscFE package. It is called 186 from PetscFinalize(). 187 188 Level: developer 189 190 .seealso: `PetscInitialize()` 191 @*/ 192 PetscErrorCode PetscFEFinalizePackage(void) 193 { 194 PetscFunctionBegin; 195 PetscCall(PetscFunctionListDestroy(&PetscSpaceList)); 196 PetscCall(PetscFunctionListDestroy(&PetscDualSpaceList)); 197 PetscCall(PetscFunctionListDestroy(&PetscFEList)); 198 PetscFEPackageInitialized = PETSC_FALSE; 199 PetscSpaceRegisterAllCalled = PETSC_FALSE; 200 PetscDualSpaceRegisterAllCalled = PETSC_FALSE; 201 PetscFERegisterAllCalled = PETSC_FALSE; 202 PetscFunctionReturn(PETSC_SUCCESS); 203 } 204 205 /*@C 206 PetscFEInitializePackage - This function initializes everything in the FE package. It is called 207 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscSpaceCreate() 208 when using static libraries. 209 210 Level: developer 211 212 .seealso: `PetscInitialize()` 213 @*/ 214 PetscErrorCode PetscFEInitializePackage(void) 215 { 216 char logList[256]; 217 PetscBool opt, pkg; 218 219 PetscFunctionBegin; 220 if (PetscFEPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS); 221 PetscFEPackageInitialized = PETSC_TRUE; 222 223 /* Register Classes */ 224 PetscCall(PetscClassIdRegister("Linear Space", &PETSCSPACE_CLASSID)); 225 PetscCall(PetscClassIdRegister("Dual Space", &PETSCDUALSPACE_CLASSID)); 226 PetscCall(PetscClassIdRegister("FE Space", &PETSCFE_CLASSID)); 227 /* Register Constructors */ 228 PetscCall(PetscSpaceRegisterAll()); 229 PetscCall(PetscDualSpaceRegisterAll()); 230 PetscCall(PetscFERegisterAll()); 231 /* Register Events */ 232 PetscCall(PetscLogEventRegister("DualSpaceSetUp", PETSCDUALSPACE_CLASSID, &PETSCDUALSPACE_SetUp)); 233 PetscCall(PetscLogEventRegister("FESetUp", PETSCFE_CLASSID, &PETSCFE_SetUp)); 234 /* Process Info */ 235 { 236 PetscClassId classids[3]; 237 238 classids[0] = PETSCFE_CLASSID; 239 classids[1] = PETSCSPACE_CLASSID; 240 classids[2] = PETSCDUALSPACE_CLASSID; 241 PetscCall(PetscInfoProcessClass("fe", 1, classids)); 242 PetscCall(PetscInfoProcessClass("space", 1, &classids[1])); 243 PetscCall(PetscInfoProcessClass("dualspace", 1, &classids[2])); 244 } 245 /* Process summary exclusions */ 246 PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt)); 247 if (opt) { 248 PetscCall(PetscStrInList("fe", logList, ',', &pkg)); 249 if (pkg) PetscCall(PetscLogEventExcludeClass(PETSCFE_CLASSID)); 250 } 251 /* Register package finalizer */ 252 PetscCall(PetscRegisterFinalize(PetscFEFinalizePackage)); 253 PetscFunctionReturn(PETSC_SUCCESS); 254 } 255 #include <petscfv.h> 256 257 static PetscBool PetscFVPackageInitialized = PETSC_FALSE; 258 /*@C 259 PetscFVFinalizePackage - This function finalizes everything in the PetscFV package. It is called 260 from PetscFinalize(). 261 262 Level: developer 263 264 .seealso: `PetscInitialize()` 265 @*/ 266 PetscErrorCode PetscFVFinalizePackage(void) 267 { 268 PetscFunctionBegin; 269 PetscCall(PetscFunctionListDestroy(&PetscLimiterList)); 270 PetscCall(PetscFunctionListDestroy(&PetscFVList)); 271 PetscFVPackageInitialized = PETSC_FALSE; 272 PetscFVRegisterAllCalled = PETSC_FALSE; 273 PetscLimiterRegisterAllCalled = PETSC_FALSE; 274 PetscFunctionReturn(PETSC_SUCCESS); 275 } 276 277 /*@C 278 PetscFVInitializePackage - This function initializes everything in the FV package. It is called 279 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscFVCreate() 280 when using static libraries. 281 282 Level: developer 283 284 .seealso: `PetscInitialize()` 285 @*/ 286 PetscErrorCode PetscFVInitializePackage(void) 287 { 288 char logList[256]; 289 PetscBool opt, pkg; 290 291 PetscFunctionBegin; 292 if (PetscFVPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS); 293 PetscFVPackageInitialized = PETSC_TRUE; 294 295 /* Register Classes */ 296 PetscCall(PetscClassIdRegister("FV Space", &PETSCFV_CLASSID)); 297 PetscCall(PetscClassIdRegister("Limiter", &PETSCLIMITER_CLASSID)); 298 /* Register Constructors */ 299 PetscCall(PetscFVRegisterAll()); 300 /* Register Events */ 301 /* Process Info */ 302 { 303 PetscClassId classids[2]; 304 305 classids[0] = PETSCFV_CLASSID; 306 classids[1] = PETSCLIMITER_CLASSID; 307 PetscCall(PetscInfoProcessClass("fv", 1, classids)); 308 PetscCall(PetscInfoProcessClass("limiter", 1, &classids[1])); 309 } 310 /* Process summary exclusions */ 311 PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt)); 312 if (opt) { 313 PetscCall(PetscStrInList("fv", logList, ',', &pkg)); 314 if (pkg) PetscCall(PetscLogEventExcludeClass(PETSCFV_CLASSID)); 315 PetscCall(PetscStrInList("limiter", logList, ',', &pkg)); 316 if (pkg) PetscCall(PetscLogEventExcludeClass(PETSCLIMITER_CLASSID)); 317 } 318 /* Register package finalizer */ 319 PetscCall(PetscRegisterFinalize(PetscFVFinalizePackage)); 320 PetscFunctionReturn(PETSC_SUCCESS); 321 } 322 #include <petscds.h> 323 324 static PetscBool PetscDSPackageInitialized = PETSC_FALSE; 325 /*@C 326 PetscDSFinalizePackage - This function finalizes everything in the PetscDS package. It is called 327 from PetscFinalize(). 328 329 Level: developer 330 331 .seealso: `PetscInitialize()` 332 @*/ 333 PetscErrorCode PetscDSFinalizePackage(void) 334 { 335 PetscFunctionBegin; 336 PetscCall(PetscFunctionListDestroy(&PetscDSList)); 337 PetscDSPackageInitialized = PETSC_FALSE; 338 PetscDSRegisterAllCalled = PETSC_FALSE; 339 PetscFunctionReturn(PETSC_SUCCESS); 340 } 341 342 /*@C 343 PetscDSInitializePackage - This function initializes everything in the DS package. It is called 344 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscDSCreate() 345 when using static libraries. 346 347 Level: developer 348 349 .seealso: `PetscInitialize()` 350 @*/ 351 PetscErrorCode PetscDSInitializePackage(void) 352 { 353 char logList[256]; 354 PetscBool opt, pkg; 355 356 PetscFunctionBegin; 357 if (PetscDSPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS); 358 PetscDSPackageInitialized = PETSC_TRUE; 359 360 /* Register Classes */ 361 PetscCall(PetscClassIdRegister("Discrete System", &PETSCDS_CLASSID)); 362 PetscCall(PetscClassIdRegister("Weak Form", &PETSCWEAKFORM_CLASSID)); 363 /* Register Constructors */ 364 PetscCall(PetscDSRegisterAll()); 365 /* Register Events */ 366 /* Process Info */ 367 { 368 PetscClassId classids[1]; 369 370 classids[0] = PETSCDS_CLASSID; 371 PetscCall(PetscInfoProcessClass("ds", 1, classids)); 372 } 373 /* Process summary exclusions */ 374 PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt)); 375 if (opt) { 376 PetscCall(PetscStrInList("ds", logList, ',', &pkg)); 377 if (pkg) PetscCall(PetscLogEventExcludeClass(PETSCDS_CLASSID)); 378 } 379 /* Register package finalizer */ 380 PetscCall(PetscRegisterFinalize(PetscDSFinalizePackage)); 381 PetscFunctionReturn(PETSC_SUCCESS); 382 } 383 384 #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES) 385 /* 386 PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 387 388 This one registers all the mesh generators and partitioners that are in 389 the basic DM library. 390 391 */ 392 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void) 393 { 394 PetscFunctionBegin; 395 PetscCall(AOInitializePackage()); 396 PetscCall(PetscPartitionerInitializePackage()); 397 PetscCall(DMInitializePackage()); 398 PetscCall(PetscFEInitializePackage()); 399 PetscCall(PetscFVInitializePackage()); 400 PetscCall(DMFieldInitializePackage()); 401 PetscFunctionReturn(PETSC_SUCCESS); 402 } 403 404 #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */ 405