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