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