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