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