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