1 #include <petscao.h> 2 #include <petsc/private/dmlabelimpl.h> 3 #include <petsc/private/dmfieldimpl.h> 4 #include <petsc/private/dmpleximpl.h> 5 #include <petsc/private/dmplextransformimpl.h> 6 #include <petsc/private/petscdsimpl.h> 7 #include <petsc/private/petscfeimpl.h> 8 #include <petsc/private/petscfvimpl.h> 9 #include <petsc/private/dmswarmimpl.h> 10 #include <petsc/private/dmnetworkimpl.h> 11 12 static PetscBool DMPackageInitialized = PETSC_FALSE; 13 /*@C 14 DMFinalizePackage - This function finalizes everything in the `DM` package. It is called 15 from `PetscFinalize()`. 16 17 Level: developer 18 19 .seealso: `PetscInitialize()` 20 @*/ 21 PetscErrorCode DMFinalizePackage(void) 22 { 23 PetscFunctionBegin; 24 PetscCall(PetscFunctionListDestroy(&DMList)); 25 DMPackageInitialized = PETSC_FALSE; 26 DMRegisterAllCalled = PETSC_FALSE; 27 PetscFunctionReturn(PETSC_SUCCESS); 28 } 29 30 #if defined(PETSC_HAVE_HYPRE) 31 PETSC_EXTERN PetscErrorCode MatCreate_HYPREStruct(Mat); 32 PETSC_EXTERN PetscErrorCode MatCreate_HYPRESStruct(Mat); 33 #endif 34 35 /*@C 36 DMInitializePackage - This function initializes everything in the `DM` package. It is called 37 from `PetscDLLibraryRegister_petscdm()` when using dynamic libraries, and on the first call to `DMCreate()` 38 or `DMDACreate()` when using shared or static libraries. 39 40 Level: developer 41 42 .seealso: `PetscInitialize()` 43 @*/ 44 PetscErrorCode DMInitializePackage(void) 45 { 46 char logList[256]; 47 PetscBool opt, pkg; 48 49 PetscFunctionBegin; 50 if (DMPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS); 51 DMPackageInitialized = PETSC_TRUE; 52 53 /* Register Classes */ 54 PetscCall(PetscClassIdRegister("Distributed Mesh", &DM_CLASSID)); 55 PetscCall(PetscClassIdRegister("DM Label", &DMLABEL_CLASSID)); 56 PetscCall(PetscClassIdRegister("Quadrature", &PETSCQUADRATURE_CLASSID)); 57 PetscCall(PetscClassIdRegister("Mesh Transform", &DMPLEXTRANSFORM_CLASSID)); 58 59 #if defined(PETSC_HAVE_HYPRE) 60 PetscCall(MatRegister(MATHYPRESTRUCT, MatCreate_HYPREStruct)); 61 PetscCall(MatRegister(MATHYPRESSTRUCT, MatCreate_HYPRESStruct)); 62 #endif 63 PetscCall(PetscSectionSymRegister(PETSCSECTIONSYMLABEL, PetscSectionSymCreate_Label)); 64 65 /* Register Constructors */ 66 PetscCall(DMRegisterAll()); 67 /* Register Events */ 68 PetscCall(PetscLogEventRegister("DMConvert", DM_CLASSID, &DM_Convert)); 69 PetscCall(PetscLogEventRegister("DMGlobalToLocal", DM_CLASSID, &DM_GlobalToLocal)); 70 PetscCall(PetscLogEventRegister("DMLocalToGlobal", DM_CLASSID, &DM_LocalToGlobal)); 71 PetscCall(PetscLogEventRegister("DMLocatePoints", DM_CLASSID, &DM_LocatePoints)); 72 PetscCall(PetscLogEventRegister("DMCoarsen", DM_CLASSID, &DM_Coarsen)); 73 PetscCall(PetscLogEventRegister("DMRefine", DM_CLASSID, &DM_Refine)); 74 PetscCall(PetscLogEventRegister("DMCreateInterp", DM_CLASSID, &DM_CreateInterpolation)); 75 PetscCall(PetscLogEventRegister("DMCreateRestrict", DM_CLASSID, &DM_CreateRestriction)); 76 PetscCall(PetscLogEventRegister("DMCreateInject", DM_CLASSID, &DM_CreateInjection)); 77 PetscCall(PetscLogEventRegister("DMCreateMat", DM_CLASSID, &DM_CreateMatrix)); 78 PetscCall(PetscLogEventRegister("DMCreateMassMat", DM_CLASSID, &DM_CreateMassMatrix)); 79 PetscCall(PetscLogEventRegister("DMLoad", DM_CLASSID, &DM_Load)); 80 PetscCall(PetscLogEventRegister("DMAdaptInterp", DM_CLASSID, &DM_AdaptInterpolator)); 81 PetscCall(PetscLogEventRegister("DMProjectFunc", DM_CLASSID, &DM_ProjectFunction)); 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("DMPlexCrFromOpts", DM_CLASSID, &DMPLEX_CreateFromOptions)); 88 PetscCall(PetscLogEventRegister("Mesh Partition", DM_CLASSID, &DMPLEX_Partition)); 89 PetscCall(PetscLogEventRegister("Mesh Migration", DM_CLASSID, &DMPLEX_Migrate)); 90 PetscCall(PetscLogEventRegister("DMPlexPartSelf", DM_CLASSID, &DMPLEX_PartSelf)); 91 PetscCall(PetscLogEventRegister("DMPlexPartLblInv", DM_CLASSID, &DMPLEX_PartLabelInvert)); 92 PetscCall(PetscLogEventRegister("DMPlexPartLblSF", DM_CLASSID, &DMPLEX_PartLabelCreateSF)); 93 PetscCall(PetscLogEventRegister("DMPlexPartStrtSF", DM_CLASSID, &DMPLEX_PartStratSF)); 94 PetscCall(PetscLogEventRegister("DMPlexPointSF", DM_CLASSID, &DMPLEX_CreatePointSF)); 95 PetscCall(PetscLogEventRegister("DMPlexInterp", DM_CLASSID, &DMPLEX_Interpolate)); 96 PetscCall(PetscLogEventRegister("DMPlexDistribute", DM_CLASSID, &DMPLEX_Distribute)); 97 PetscCall(PetscLogEventRegister("DMPlexDistCones", DM_CLASSID, &DMPLEX_DistributeCones)); 98 PetscCall(PetscLogEventRegister("DMPlexDistLabels", DM_CLASSID, &DMPLEX_DistributeLabels)); 99 PetscCall(PetscLogEventRegister("DMPlexDistSF", DM_CLASSID, &DMPLEX_DistributeSF)); 100 PetscCall(PetscLogEventRegister("DMPlexDistOvrlp", DM_CLASSID, &DMPLEX_DistributeOverlap)); 101 PetscCall(PetscLogEventRegister("DMPlexDistField", DM_CLASSID, &DMPLEX_DistributeField)); 102 PetscCall(PetscLogEventRegister("DMPlexDistData", DM_CLASSID, &DMPLEX_DistributeData)); 103 PetscCall(PetscLogEventRegister("DMPlexInterpSF", DM_CLASSID, &DMPLEX_InterpolateSF)); 104 PetscCall(PetscLogEventRegister("DMPlexGToNBegin", DM_CLASSID, &DMPLEX_GlobalToNaturalBegin)); 105 PetscCall(PetscLogEventRegister("DMPlexGToNEnd", DM_CLASSID, &DMPLEX_GlobalToNaturalEnd)); 106 PetscCall(PetscLogEventRegister("DMPlexNToGBegin", DM_CLASSID, &DMPLEX_NaturalToGlobalBegin)); 107 PetscCall(PetscLogEventRegister("DMPlexNToGEnd", DM_CLASSID, &DMPLEX_NaturalToGlobalEnd)); 108 PetscCall(PetscLogEventRegister("DMPlexStratify", DM_CLASSID, &DMPLEX_Stratify)); 109 PetscCall(PetscLogEventRegister("DMPlexSymmetrize", DM_CLASSID, &DMPLEX_Symmetrize)); 110 PetscCall(PetscLogEventRegister("DMPlexPrealloc", DM_CLASSID, &DMPLEX_Preallocate)); 111 PetscCall(PetscLogEventRegister("DMPlexResidualFE", DM_CLASSID, &DMPLEX_ResidualFEM)); 112 PetscCall(PetscLogEventRegister("DMPlexJacobianFE", DM_CLASSID, &DMPLEX_JacobianFEM)); 113 PetscCall(PetscLogEventRegister("DMPlexInterpFE", DM_CLASSID, &DMPLEX_InterpolatorFEM)); 114 PetscCall(PetscLogEventRegister("DMPlexInjectorFE", DM_CLASSID, &DMPLEX_InjectorFEM)); 115 PetscCall(PetscLogEventRegister("DMPlexIntegralFEM", DM_CLASSID, &DMPLEX_IntegralFEM)); 116 PetscCall(PetscLogEventRegister("DMPlexRebalance", DM_CLASSID, &DMPLEX_RebalanceSharedPoints)); 117 PetscCall(PetscLogEventRegister("DMPlexLocatePoints", DM_CLASSID, &DMPLEX_LocatePoints)); 118 PetscCall(PetscLogEventRegister("DMPlexTopologyView", DM_CLASSID, &DMPLEX_TopologyView)); 119 PetscCall(PetscLogEventRegister("DMPlexDistributionView", DM_CLASSID, &DMPLEX_DistributionView)); 120 PetscCall(PetscLogEventRegister("DMPlexLabelsView", DM_CLASSID, &DMPLEX_LabelsView)); 121 PetscCall(PetscLogEventRegister("DMPlexCoordinatesView", DM_CLASSID, &DMPLEX_CoordinatesView)); 122 PetscCall(PetscLogEventRegister("DMPlexSectionView", DM_CLASSID, &DMPLEX_SectionView)); 123 PetscCall(PetscLogEventRegister("DMPlexGlobalVectorView", DM_CLASSID, &DMPLEX_GlobalVectorView)); 124 PetscCall(PetscLogEventRegister("DMPlexLocalVectorView", DM_CLASSID, &DMPLEX_LocalVectorView)); 125 PetscCall(PetscLogEventRegister("DMPlexTopologyLoad", DM_CLASSID, &DMPLEX_TopologyLoad)); 126 PetscCall(PetscLogEventRegister("DMPlexDistributionLoad", DM_CLASSID, &DMPLEX_DistributionLoad)); 127 PetscCall(PetscLogEventRegister("DMPlexLabelsLoad", DM_CLASSID, &DMPLEX_LabelsLoad)); 128 PetscCall(PetscLogEventRegister("DMPlexCoordinatesLoad", DM_CLASSID, &DMPLEX_CoordinatesLoad)); 129 PetscCall(PetscLogEventRegister("DMPlexSectionLoad", DM_CLASSID, &DMPLEX_SectionLoad)); 130 PetscCall(PetscLogEventRegister("DMPlexGlobalVectorLoad", DM_CLASSID, &DMPLEX_GlobalVectorLoad)); 131 PetscCall(PetscLogEventRegister("DMPlexLocalVectorLoad", DM_CLASSID, &DMPLEX_LocalVectorLoad)); 132 PetscCall(PetscLogEventRegister("DMPlexMetricEnforceSPD", DM_CLASSID, &DMPLEX_MetricEnforceSPD)); 133 PetscCall(PetscLogEventRegister("DMPlexMetricNormalize", DM_CLASSID, &DMPLEX_MetricNormalize)); 134 PetscCall(PetscLogEventRegister("DMPlexMetricAverage", DM_CLASSID, &DMPLEX_MetricAverage)); 135 PetscCall(PetscLogEventRegister("DMPlexMetricIntersect", DM_CLASSID, &DMPLEX_MetricIntersection)); 136 PetscCall(PetscLogEventRegister("DMPlexGenerate", DM_CLASSID, &DMPLEX_Generate)); 137 PetscCall(PetscLogEventRegister("DMPlexTransform", DM_CLASSID, &DMPLEX_Transform)); 138 PetscCall(PetscLogEventRegister("DMPlexGetLocOff", DM_CLASSID, &DMPLEX_GetLocalOffsets)); 139 140 PetscCall(PetscLogEventRegister("RebalBuildGraph", DM_CLASSID, &DMPLEX_RebalBuildGraph)); 141 PetscCall(PetscLogEventRegister("RebalGatherGraph", DM_CLASSID, &DMPLEX_RebalGatherGraph)); 142 PetscCall(PetscLogEventRegister("RebalPartition", DM_CLASSID, &DMPLEX_RebalPartition)); 143 PetscCall(PetscLogEventRegister("RebalScatterPart", DM_CLASSID, &DMPLEX_RebalScatterPart)); 144 PetscCall(PetscLogEventRegister("RebalRewriteSF", DM_CLASSID, &DMPLEX_RebalRewriteSF)); 145 PetscCall(PetscLogEventRegister("DMPlexUninterp", DM_CLASSID, &DMPLEX_Uninterpolate)); 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 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 `PetscFE` 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 264 /*@C 265 PetscFVFinalizePackage - This function finalizes everything in the `PetscFV` package. It is called 266 from `PetscFinalize()`. 267 268 Level: developer 269 270 .seealso: `PetscInitialize()` 271 @*/ 272 PetscErrorCode PetscFVFinalizePackage(void) 273 { 274 PetscFunctionBegin; 275 PetscCall(PetscFunctionListDestroy(&PetscLimiterList)); 276 PetscCall(PetscFunctionListDestroy(&PetscFVList)); 277 PetscFVPackageInitialized = PETSC_FALSE; 278 PetscFVRegisterAllCalled = PETSC_FALSE; 279 PetscLimiterRegisterAllCalled = PETSC_FALSE; 280 PetscFunctionReturn(PETSC_SUCCESS); 281 } 282 283 /*@C 284 PetscFVInitializePackage - This function initializes everything in the `PetscFV` package. It is called 285 from `PetscDLLibraryRegister()` when using dynamic libraries, and on the first call to `PetscFVCreate()` 286 when using static libraries. 287 288 Level: developer 289 290 .seealso: `PetscInitialize()` 291 @*/ 292 PetscErrorCode PetscFVInitializePackage(void) 293 { 294 char logList[256]; 295 PetscBool opt, pkg; 296 297 PetscFunctionBegin; 298 if (PetscFVPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS); 299 PetscFVPackageInitialized = PETSC_TRUE; 300 301 /* Register Classes */ 302 PetscCall(PetscClassIdRegister("FV Space", &PETSCFV_CLASSID)); 303 PetscCall(PetscClassIdRegister("Limiter", &PETSCLIMITER_CLASSID)); 304 /* Register Constructors */ 305 PetscCall(PetscFVRegisterAll()); 306 /* Register Events */ 307 /* Process Info */ 308 { 309 PetscClassId classids[2]; 310 311 classids[0] = PETSCFV_CLASSID; 312 classids[1] = PETSCLIMITER_CLASSID; 313 PetscCall(PetscInfoProcessClass("fv", 1, classids)); 314 PetscCall(PetscInfoProcessClass("limiter", 1, &classids[1])); 315 } 316 /* Process summary exclusions */ 317 PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt)); 318 if (opt) { 319 PetscCall(PetscStrInList("fv", logList, ',', &pkg)); 320 if (pkg) PetscCall(PetscLogEventExcludeClass(PETSCFV_CLASSID)); 321 PetscCall(PetscStrInList("limiter", logList, ',', &pkg)); 322 if (pkg) PetscCall(PetscLogEventExcludeClass(PETSCLIMITER_CLASSID)); 323 } 324 /* Register package finalizer */ 325 PetscCall(PetscRegisterFinalize(PetscFVFinalizePackage)); 326 PetscFunctionReturn(PETSC_SUCCESS); 327 } 328 #include <petscds.h> 329 330 static PetscBool PetscDSPackageInitialized = PETSC_FALSE; 331 332 /*@C 333 PetscDSFinalizePackage - This function finalizes everything in the `PetscDS` package. It is called 334 from `PetscFinalize()`. 335 336 Level: developer 337 338 .seealso: `PetscInitialize()` 339 @*/ 340 PetscErrorCode PetscDSFinalizePackage(void) 341 { 342 PetscFunctionBegin; 343 PetscCall(PetscFunctionListDestroy(&PetscDSList)); 344 PetscDSPackageInitialized = PETSC_FALSE; 345 PetscDSRegisterAllCalled = PETSC_FALSE; 346 PetscFunctionReturn(PETSC_SUCCESS); 347 } 348 349 /*@C 350 PetscDSInitializePackage - This function initializes everything in the `PetscDS` package. It is called 351 from `PetscDLLibraryRegister()` when using dynamic libraries, and on the first call to `PetscDSCreate()` 352 when using static libraries. 353 354 Level: developer 355 356 .seealso: `PetscInitialize()` 357 @*/ 358 PetscErrorCode PetscDSInitializePackage(void) 359 { 360 char logList[256]; 361 PetscBool opt, pkg; 362 363 PetscFunctionBegin; 364 if (PetscDSPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS); 365 PetscDSPackageInitialized = PETSC_TRUE; 366 367 /* Register Classes */ 368 PetscCall(PetscClassIdRegister("Discrete System", &PETSCDS_CLASSID)); 369 PetscCall(PetscClassIdRegister("Weak Form", &PETSCWEAKFORM_CLASSID)); 370 /* Register Constructors */ 371 PetscCall(PetscDSRegisterAll()); 372 /* Register Events */ 373 /* Process Info */ 374 { 375 PetscClassId classids[1]; 376 377 classids[0] = PETSCDS_CLASSID; 378 PetscCall(PetscInfoProcessClass("ds", 1, classids)); 379 } 380 /* Process summary exclusions */ 381 PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt)); 382 if (opt) { 383 PetscCall(PetscStrInList("ds", logList, ',', &pkg)); 384 if (pkg) PetscCall(PetscLogEventExcludeClass(PETSCDS_CLASSID)); 385 } 386 /* Register package finalizer */ 387 PetscCall(PetscRegisterFinalize(PetscDSFinalizePackage)); 388 PetscFunctionReturn(PETSC_SUCCESS); 389 } 390 391 #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES) 392 /* 393 PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 394 395 This one registers all the mesh generators and partitioners that are in 396 the basic DM library. 397 398 */ 399 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void) 400 { 401 PetscFunctionBegin; 402 PetscCall(AOInitializePackage()); 403 PetscCall(PetscPartitionerInitializePackage()); 404 PetscCall(DMInitializePackage()); 405 PetscCall(PetscFEInitializePackage()); 406 PetscCall(PetscFVInitializePackage()); 407 PetscCall(DMFieldInitializePackage()); 408 PetscFunctionReturn(PETSC_SUCCESS); 409 } 410 411 #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */ 412