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