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