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