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 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 CHKERRQ(PetscFunctionListDestroy(&DMList)); 25 DMPackageInitialized = PETSC_FALSE; 26 DMRegisterAllCalled = PETSC_FALSE; 27 PetscFunctionReturn(0); 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 AOCreate() 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(0); 51 DMPackageInitialized = PETSC_TRUE; 52 53 /* Register Classes */ 54 CHKERRQ(PetscClassIdRegister("Distributed Mesh",&DM_CLASSID)); 55 CHKERRQ(PetscClassIdRegister("DM Label",&DMLABEL_CLASSID)); 56 CHKERRQ(PetscClassIdRegister("Quadrature",&PETSCQUADRATURE_CLASSID)); 57 CHKERRQ(PetscClassIdRegister("Mesh Transform",&DMPLEXTRANSFORM_CLASSID)); 58 59 #if defined(PETSC_HAVE_HYPRE) 60 CHKERRQ(MatRegister(MATHYPRESTRUCT, MatCreate_HYPREStruct)); 61 CHKERRQ(MatRegister(MATHYPRESSTRUCT, MatCreate_HYPRESStruct)); 62 #endif 63 CHKERRQ(PetscSectionSymRegister(PETSCSECTIONSYMLABEL,PetscSectionSymCreate_Label)); 64 65 /* Register Constructors */ 66 CHKERRQ(DMRegisterAll()); 67 /* Register Events */ 68 CHKERRQ(PetscLogEventRegister("DMConvert", DM_CLASSID,&DM_Convert)); 69 CHKERRQ(PetscLogEventRegister("DMGlobalToLocal", DM_CLASSID,&DM_GlobalToLocal)); 70 CHKERRQ(PetscLogEventRegister("DMLocalToGlobal", DM_CLASSID,&DM_LocalToGlobal)); 71 CHKERRQ(PetscLogEventRegister("DMLocatePoints", DM_CLASSID,&DM_LocatePoints)); 72 CHKERRQ(PetscLogEventRegister("DMCoarsen", DM_CLASSID,&DM_Coarsen)); 73 CHKERRQ(PetscLogEventRegister("DMCreateInterp", DM_CLASSID,&DM_CreateInterpolation)); 74 CHKERRQ(PetscLogEventRegister("DMCreateRestrict", DM_CLASSID,&DM_CreateRestriction)); 75 CHKERRQ(PetscLogEventRegister("DMCreateInject", DM_CLASSID,&DM_CreateInjection)); 76 CHKERRQ(PetscLogEventRegister("DMCreateMat", DM_CLASSID,&DM_CreateMatrix)); 77 CHKERRQ(PetscLogEventRegister("DMLoad", DM_CLASSID,&DM_Load)); 78 CHKERRQ(PetscLogEventRegister("DMAdaptInterp", DM_CLASSID,&DM_AdaptInterpolator)); 79 80 CHKERRQ(PetscLogEventRegister("DMPlexBuFrCeLi", DM_CLASSID,&DMPLEX_BuildFromCellList)); 81 CHKERRQ(PetscLogEventRegister("DMPlexBuCoFrCeLi", DM_CLASSID,&DMPLEX_BuildCoordinatesFromCellList)); 82 CHKERRQ(PetscLogEventRegister("DMPlexCreateGmsh", DM_CLASSID,&DMPLEX_CreateGmsh)); 83 CHKERRQ(PetscLogEventRegister("DMPlexCrFromFile", DM_CLASSID,&DMPLEX_CreateFromFile)); 84 CHKERRQ(PetscLogEventRegister("Mesh Partition", DM_CLASSID,&DMPLEX_Partition)); 85 CHKERRQ(PetscLogEventRegister("Mesh Migration", DM_CLASSID,&DMPLEX_Migrate)); 86 CHKERRQ(PetscLogEventRegister("DMPlexPartSelf", DM_CLASSID,&DMPLEX_PartSelf)); 87 CHKERRQ(PetscLogEventRegister("DMPlexPartLblInv", DM_CLASSID,&DMPLEX_PartLabelInvert)); 88 CHKERRQ(PetscLogEventRegister("DMPlexPartLblSF", DM_CLASSID,&DMPLEX_PartLabelCreateSF)); 89 CHKERRQ(PetscLogEventRegister("DMPlexPartStrtSF", DM_CLASSID,&DMPLEX_PartStratSF)); 90 CHKERRQ(PetscLogEventRegister("DMPlexPointSF", DM_CLASSID,&DMPLEX_CreatePointSF)); 91 CHKERRQ(PetscLogEventRegister("DMPlexInterp", DM_CLASSID,&DMPLEX_Interpolate)); 92 CHKERRQ(PetscLogEventRegister("DMPlexDistribute", DM_CLASSID,&DMPLEX_Distribute)); 93 CHKERRQ(PetscLogEventRegister("DMPlexDistCones", DM_CLASSID,&DMPLEX_DistributeCones)); 94 CHKERRQ(PetscLogEventRegister("DMPlexDistLabels", DM_CLASSID,&DMPLEX_DistributeLabels)); 95 CHKERRQ(PetscLogEventRegister("DMPlexDistSF", DM_CLASSID,&DMPLEX_DistributeSF)); 96 CHKERRQ(PetscLogEventRegister("DMPlexDistOvrlp", DM_CLASSID,&DMPLEX_DistributeOverlap)); 97 CHKERRQ(PetscLogEventRegister("DMPlexDistField", DM_CLASSID,&DMPLEX_DistributeField)); 98 CHKERRQ(PetscLogEventRegister("DMPlexDistData", DM_CLASSID,&DMPLEX_DistributeData)); 99 CHKERRQ(PetscLogEventRegister("DMPlexInterpSF", DM_CLASSID,&DMPLEX_InterpolateSF)); 100 CHKERRQ(PetscLogEventRegister("DMPlexGToNBegin", DM_CLASSID,&DMPLEX_GlobalToNaturalBegin)); 101 CHKERRQ(PetscLogEventRegister("DMPlexGToNEnd", DM_CLASSID,&DMPLEX_GlobalToNaturalEnd)); 102 CHKERRQ(PetscLogEventRegister("DMPlexNToGBegin", DM_CLASSID,&DMPLEX_NaturalToGlobalBegin)); 103 CHKERRQ(PetscLogEventRegister("DMPlexNToGEnd", DM_CLASSID,&DMPLEX_NaturalToGlobalEnd)); 104 CHKERRQ(PetscLogEventRegister("DMPlexStratify", DM_CLASSID,&DMPLEX_Stratify)); 105 CHKERRQ(PetscLogEventRegister("DMPlexSymmetrize", DM_CLASSID,&DMPLEX_Symmetrize)); 106 CHKERRQ(PetscLogEventRegister("DMPlexPrealloc", DM_CLASSID,&DMPLEX_Preallocate)); 107 CHKERRQ(PetscLogEventRegister("DMPlexResidualFE", DM_CLASSID,&DMPLEX_ResidualFEM)); 108 CHKERRQ(PetscLogEventRegister("DMPlexJacobianFE", DM_CLASSID,&DMPLEX_JacobianFEM)); 109 CHKERRQ(PetscLogEventRegister("DMPlexInterpFE", DM_CLASSID,&DMPLEX_InterpolatorFEM)); 110 CHKERRQ(PetscLogEventRegister("DMPlexInjectorFE", DM_CLASSID,&DMPLEX_InjectorFEM)); 111 CHKERRQ(PetscLogEventRegister("DMPlexIntegralFEM", DM_CLASSID,&DMPLEX_IntegralFEM)); 112 CHKERRQ(PetscLogEventRegister("DMPlexRebalance", DM_CLASSID,&DMPLEX_RebalanceSharedPoints)); 113 CHKERRQ(PetscLogEventRegister("DMPlexLocatePoints", DM_CLASSID,&DMPLEX_LocatePoints)); 114 CHKERRQ(PetscLogEventRegister("DMPlexTopologyView", DM_CLASSID,&DMPLEX_TopologyView)); 115 CHKERRQ(PetscLogEventRegister("DMPlexLabelsView", DM_CLASSID,&DMPLEX_LabelsView)); 116 CHKERRQ(PetscLogEventRegister("DMPlexCoordinatesView", DM_CLASSID,&DMPLEX_CoordinatesView)); 117 CHKERRQ(PetscLogEventRegister("DMPlexSectionView", DM_CLASSID,&DMPLEX_SectionView)); 118 CHKERRQ(PetscLogEventRegister("DMPlexGlobalVectorView", DM_CLASSID,&DMPLEX_GlobalVectorView)); 119 CHKERRQ(PetscLogEventRegister("DMPlexLocalVectorView", DM_CLASSID,&DMPLEX_LocalVectorView)); 120 CHKERRQ(PetscLogEventRegister("DMPlexTopologyLoad", DM_CLASSID,&DMPLEX_TopologyLoad)); 121 CHKERRQ(PetscLogEventRegister("DMPlexLabelsLoad", DM_CLASSID,&DMPLEX_LabelsLoad)); 122 CHKERRQ(PetscLogEventRegister("DMPlexCoordinatesLoad", DM_CLASSID,&DMPLEX_CoordinatesLoad)); 123 CHKERRQ(PetscLogEventRegister("DMPlexSectionLoad", DM_CLASSID,&DMPLEX_SectionLoad)); 124 CHKERRQ(PetscLogEventRegister("DMPlexGlobalVectorLoad", DM_CLASSID,&DMPLEX_GlobalVectorLoad)); 125 CHKERRQ(PetscLogEventRegister("DMPlexLocalVectorLoad", DM_CLASSID,&DMPLEX_LocalVectorLoad)); 126 CHKERRQ(PetscLogEventRegister("DMPlexMetricEnforceSPD", DM_CLASSID,&DMPLEX_MetricEnforceSPD)); 127 CHKERRQ(PetscLogEventRegister("DMPlexMetricNormalize", DM_CLASSID,&DMPLEX_MetricNormalize)); 128 CHKERRQ(PetscLogEventRegister("DMPlexMetricAverage", DM_CLASSID,&DMPLEX_MetricAverage)); 129 CHKERRQ(PetscLogEventRegister("DMPlexMetricIntersect", DM_CLASSID,&DMPLEX_MetricIntersection)); 130 131 CHKERRQ(PetscLogEventRegister("DMSwarmMigrate", DM_CLASSID,&DMSWARM_Migrate)); 132 CHKERRQ(PetscLogEventRegister("DMSwarmDETSetup", DM_CLASSID,&DMSWARM_DataExchangerTopologySetup)); 133 CHKERRQ(PetscLogEventRegister("DMSwarmDExBegin", DM_CLASSID,&DMSWARM_DataExchangerBegin)); 134 CHKERRQ(PetscLogEventRegister("DMSwarmDExEnd", DM_CLASSID,&DMSWARM_DataExchangerEnd)); 135 CHKERRQ(PetscLogEventRegister("DMSwarmDESendCnt", DM_CLASSID,&DMSWARM_DataExchangerSendCount)); 136 CHKERRQ(PetscLogEventRegister("DMSwarmDEPack", DM_CLASSID,&DMSWARM_DataExchangerPack)); 137 CHKERRQ(PetscLogEventRegister("DMSwarmAddPnts", DM_CLASSID,&DMSWARM_AddPoints)); 138 CHKERRQ(PetscLogEventRegister("DMSwarmRmvPnts", DM_CLASSID,&DMSWARM_RemovePoints)); 139 CHKERRQ(PetscLogEventRegister("DMSwarmSort", DM_CLASSID,&DMSWARM_Sort)); 140 CHKERRQ(PetscLogEventRegister("DMSwarmSetSizes", DM_CLASSID,&DMSWARM_SetSizes)); 141 /* Process Info */ 142 { 143 PetscClassId classids[1]; 144 145 classids[0] = DM_CLASSID; 146 CHKERRQ(PetscInfoProcessClass("dm", 1, classids)); 147 } 148 149 /* Process summary exclusions */ 150 CHKERRQ(PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt)); 151 if (opt) { 152 CHKERRQ(PetscStrInList("dm",logList,',',&pkg)); 153 if (pkg) CHKERRQ(PetscLogEventExcludeClass(DM_CLASSID)); 154 } 155 156 CHKERRQ(DMGenerateRegisterAll()); 157 CHKERRQ(PetscRegisterFinalize(DMGenerateRegisterDestroy)); 158 CHKERRQ(DMPlexTransformRegisterAll()); 159 CHKERRQ(PetscRegisterFinalize(DMPlexTransformRegisterDestroy)); 160 CHKERRQ(PetscRegisterFinalize(DMFinalizePackage)); 161 PetscFunctionReturn(0); 162 } 163 #include <petscfe.h> 164 165 static PetscBool PetscFEPackageInitialized = PETSC_FALSE; 166 /*@C 167 PetscFEFinalizePackage - This function finalizes everything in the PetscFE package. It is called 168 from PetscFinalize(). 169 170 Level: developer 171 172 .seealso: PetscInitialize() 173 @*/ 174 PetscErrorCode PetscFEFinalizePackage(void) 175 { 176 PetscFunctionBegin; 177 CHKERRQ(PetscFunctionListDestroy(&PetscSpaceList)); 178 CHKERRQ(PetscFunctionListDestroy(&PetscDualSpaceList)); 179 CHKERRQ(PetscFunctionListDestroy(&PetscFEList)); 180 PetscFEPackageInitialized = PETSC_FALSE; 181 PetscSpaceRegisterAllCalled = PETSC_FALSE; 182 PetscDualSpaceRegisterAllCalled = PETSC_FALSE; 183 PetscFERegisterAllCalled = PETSC_FALSE; 184 PetscFunctionReturn(0); 185 } 186 187 /*@C 188 PetscFEInitializePackage - This function initializes everything in the FE package. It is called 189 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscSpaceCreate() 190 when using static libraries. 191 192 Level: developer 193 194 .seealso: PetscInitialize() 195 @*/ 196 PetscErrorCode PetscFEInitializePackage(void) 197 { 198 char logList[256]; 199 PetscBool opt,pkg; 200 201 PetscFunctionBegin; 202 if (PetscFEPackageInitialized) PetscFunctionReturn(0); 203 PetscFEPackageInitialized = PETSC_TRUE; 204 205 /* Register Classes */ 206 CHKERRQ(PetscClassIdRegister("Linear Space", &PETSCSPACE_CLASSID)); 207 CHKERRQ(PetscClassIdRegister("Dual Space", &PETSCDUALSPACE_CLASSID)); 208 CHKERRQ(PetscClassIdRegister("FE Space", &PETSCFE_CLASSID)); 209 /* Register Constructors */ 210 CHKERRQ(PetscSpaceRegisterAll()); 211 CHKERRQ(PetscDualSpaceRegisterAll()); 212 CHKERRQ(PetscFERegisterAll()); 213 /* Register Events */ 214 CHKERRQ(PetscLogEventRegister("DualSpaceSetUp", PETSCDUALSPACE_CLASSID, &PETSCDUALSPACE_SetUp)); 215 CHKERRQ(PetscLogEventRegister("FESetUp", PETSCFE_CLASSID, &PETSCFE_SetUp)); 216 /* Process Info */ 217 { 218 PetscClassId classids[3]; 219 220 classids[0] = PETSCFE_CLASSID; 221 classids[1] = PETSCSPACE_CLASSID; 222 classids[2] = PETSCDUALSPACE_CLASSID; 223 CHKERRQ(PetscInfoProcessClass("fe", 1, classids)); 224 CHKERRQ(PetscInfoProcessClass("space", 1, &classids[1])); 225 CHKERRQ(PetscInfoProcessClass("dualspace", 1, &classids[2])); 226 } 227 /* Process summary exclusions */ 228 CHKERRQ(PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt)); 229 if (opt) { 230 CHKERRQ(PetscStrInList("fe",logList,',',&pkg)); 231 if (pkg) CHKERRQ(PetscLogEventExcludeClass(PETSCFE_CLASSID)); 232 } 233 /* Register package finalizer */ 234 CHKERRQ(PetscRegisterFinalize(PetscFEFinalizePackage)); 235 PetscFunctionReturn(0); 236 } 237 #include <petscfv.h> 238 239 static PetscBool PetscFVPackageInitialized = PETSC_FALSE; 240 /*@C 241 PetscFVFinalizePackage - This function finalizes everything in the PetscFV package. It is called 242 from PetscFinalize(). 243 244 Level: developer 245 246 .seealso: PetscInitialize() 247 @*/ 248 PetscErrorCode PetscFVFinalizePackage(void) 249 { 250 PetscFunctionBegin; 251 CHKERRQ(PetscFunctionListDestroy(&PetscLimiterList)); 252 CHKERRQ(PetscFunctionListDestroy(&PetscFVList)); 253 PetscFVPackageInitialized = PETSC_FALSE; 254 PetscFVRegisterAllCalled = PETSC_FALSE; 255 PetscLimiterRegisterAllCalled = PETSC_FALSE; 256 PetscFunctionReturn(0); 257 } 258 259 /*@C 260 PetscFVInitializePackage - This function initializes everything in the FV package. It is called 261 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscFVCreate() 262 when using static libraries. 263 264 Level: developer 265 266 .seealso: PetscInitialize() 267 @*/ 268 PetscErrorCode PetscFVInitializePackage(void) 269 { 270 char logList[256]; 271 PetscBool opt,pkg; 272 273 PetscFunctionBegin; 274 if (PetscFVPackageInitialized) PetscFunctionReturn(0); 275 PetscFVPackageInitialized = PETSC_TRUE; 276 277 /* Register Classes */ 278 CHKERRQ(PetscClassIdRegister("FV Space", &PETSCFV_CLASSID)); 279 CHKERRQ(PetscClassIdRegister("Limiter", &PETSCLIMITER_CLASSID)); 280 /* Register Constructors */ 281 CHKERRQ(PetscFVRegisterAll()); 282 /* Register Events */ 283 /* Process Info */ 284 { 285 PetscClassId classids[2]; 286 287 classids[0] = PETSCFV_CLASSID; 288 classids[1] = PETSCLIMITER_CLASSID; 289 CHKERRQ(PetscInfoProcessClass("fv", 1, classids)); 290 CHKERRQ(PetscInfoProcessClass("limiter", 1, &classids[1])); 291 } 292 /* Process summary exclusions */ 293 CHKERRQ(PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt)); 294 if (opt) { 295 CHKERRQ(PetscStrInList("fv",logList,',',&pkg)); 296 if (pkg) CHKERRQ(PetscLogEventExcludeClass(PETSCFV_CLASSID)); 297 CHKERRQ(PetscStrInList("limiter",logList,',',&pkg)); 298 if (pkg) CHKERRQ(PetscLogEventExcludeClass(PETSCLIMITER_CLASSID)); 299 } 300 /* Register package finalizer */ 301 CHKERRQ(PetscRegisterFinalize(PetscFVFinalizePackage)); 302 PetscFunctionReturn(0); 303 } 304 #include <petscds.h> 305 306 static PetscBool PetscDSPackageInitialized = PETSC_FALSE; 307 /*@C 308 PetscDSFinalizePackage - This function finalizes everything in the PetscDS package. It is called 309 from PetscFinalize(). 310 311 Level: developer 312 313 .seealso: PetscInitialize() 314 @*/ 315 PetscErrorCode PetscDSFinalizePackage(void) 316 { 317 PetscFunctionBegin; 318 CHKERRQ(PetscFunctionListDestroy(&PetscDSList)); 319 PetscDSPackageInitialized = PETSC_FALSE; 320 PetscDSRegisterAllCalled = PETSC_FALSE; 321 PetscFunctionReturn(0); 322 } 323 324 /*@C 325 PetscDSInitializePackage - This function initializes everything in the DS package. It is called 326 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscDSCreate() 327 when using static libraries. 328 329 Level: developer 330 331 .seealso: PetscInitialize() 332 @*/ 333 PetscErrorCode PetscDSInitializePackage(void) 334 { 335 char logList[256]; 336 PetscBool opt,pkg; 337 338 PetscFunctionBegin; 339 if (PetscDSPackageInitialized) PetscFunctionReturn(0); 340 PetscDSPackageInitialized = PETSC_TRUE; 341 342 /* Register Classes */ 343 CHKERRQ(PetscClassIdRegister("Discrete System", &PETSCDS_CLASSID)); 344 CHKERRQ(PetscClassIdRegister("Weak Form", &PETSCWEAKFORM_CLASSID)); 345 /* Register Constructors */ 346 CHKERRQ(PetscDSRegisterAll()); 347 /* Register Events */ 348 /* Process Info */ 349 { 350 PetscClassId classids[1]; 351 352 classids[0] = PETSCDS_CLASSID; 353 CHKERRQ(PetscInfoProcessClass("ds", 1, classids)); 354 } 355 /* Process summary exclusions */ 356 CHKERRQ(PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt)); 357 if (opt) { 358 CHKERRQ(PetscStrInList("ds",logList,',',&pkg)); 359 if (pkg) CHKERRQ(PetscLogEventExcludeClass(PETSCDS_CLASSID)); 360 } 361 /* Register package finalizer */ 362 CHKERRQ(PetscRegisterFinalize(PetscDSFinalizePackage)); 363 PetscFunctionReturn(0); 364 } 365 366 #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES) 367 /* 368 PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 369 370 This one registers all the mesh generators and partitioners that are in 371 the basic DM library. 372 373 */ 374 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void) 375 { 376 PetscFunctionBegin; 377 CHKERRQ(AOInitializePackage()); 378 CHKERRQ(PetscPartitionerInitializePackage()); 379 CHKERRQ(DMInitializePackage()); 380 CHKERRQ(PetscFEInitializePackage()); 381 CHKERRQ(PetscFVInitializePackage()); 382 CHKERRQ(DMFieldInitializePackage()); 383 PetscFunctionReturn(0); 384 } 385 386 #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */ 387