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