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 .keywords: AO, initialize, package 19 .seealso: PetscInitialize() 20 @*/ 21 PetscErrorCode DMFinalizePackage(void) 22 { 23 PetscErrorCode ierr; 24 25 PetscFunctionBegin; 26 ierr = PetscFunctionListDestroy(&PetscPartitionerList);CHKERRQ(ierr); 27 ierr = PetscFunctionListDestroy(&DMList);CHKERRQ(ierr); 28 DMPackageInitialized = PETSC_FALSE; 29 DMRegisterAllCalled = PETSC_FALSE; 30 PetscPartitionerRegisterAllCalled = PETSC_FALSE; 31 PetscFunctionReturn(0); 32 } 33 34 #if defined(PETSC_HAVE_HYPRE) 35 PETSC_EXTERN PetscErrorCode MatCreate_HYPREStruct(Mat); 36 PETSC_EXTERN PetscErrorCode MatCreate_HYPRESStruct(Mat); 37 #endif 38 39 /*@C 40 DMInitializePackage - This function initializes everything in the DM package. It is called 41 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to AOCreate() 42 or DMDACreate() when using static libraries. 43 44 Level: developer 45 46 .keywords: AO, initialize, package 47 .seealso: PetscInitialize() 48 @*/ 49 PetscErrorCode DMInitializePackage(void) 50 { 51 char logList[256]; 52 PetscBool opt,pkg; 53 PetscErrorCode ierr; 54 55 PetscFunctionBegin; 56 if (DMPackageInitialized) PetscFunctionReturn(0); 57 DMPackageInitialized = PETSC_TRUE; 58 59 /* Register Classes */ 60 ierr = PetscClassIdRegister("Distributed Mesh",&DM_CLASSID);CHKERRQ(ierr); 61 ierr = PetscClassIdRegister("GraphPartitioner",&PETSCPARTITIONER_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 80 ierr = PetscLogEventRegister("Mesh Partition", DM_CLASSID,&DMPLEX_Partition);CHKERRQ(ierr); 81 ierr = PetscLogEventRegister("Mesh Migration", DM_CLASSID,&DMPLEX_Migrate);CHKERRQ(ierr); 82 ierr = PetscLogEventRegister("DMPlexInterp", DM_CLASSID,&DMPLEX_Interpolate);CHKERRQ(ierr); 83 ierr = PetscLogEventRegister("DMPlexDistribute", DM_CLASSID,&DMPLEX_Distribute);CHKERRQ(ierr); 84 ierr = PetscLogEventRegister("DMPlexDistCones", DM_CLASSID,&DMPLEX_DistributeCones);CHKERRQ(ierr); 85 ierr = PetscLogEventRegister("DMPlexDistLabels", DM_CLASSID,&DMPLEX_DistributeLabels);CHKERRQ(ierr); 86 ierr = PetscLogEventRegister("DMPlexDistSF", DM_CLASSID,&DMPLEX_DistributeSF);CHKERRQ(ierr); 87 ierr = PetscLogEventRegister("DMPlexDistOvrlp", DM_CLASSID,&DMPLEX_DistributeOverlap);CHKERRQ(ierr); 88 ierr = PetscLogEventRegister("DMPlexDistField", DM_CLASSID,&DMPLEX_DistributeField);CHKERRQ(ierr); 89 ierr = PetscLogEventRegister("DMPlexDistData", DM_CLASSID,&DMPLEX_DistributeData);CHKERRQ(ierr); 90 ierr = PetscLogEventRegister("DMPlexInterpSF", DM_CLASSID,&DMPLEX_InterpolateSF);CHKERRQ(ierr); 91 ierr = PetscLogEventRegister("DMPlexGToNBegin", DM_CLASSID,&DMPLEX_GlobalToNaturalBegin);CHKERRQ(ierr); 92 ierr = PetscLogEventRegister("DMPlexGToNEnd", DM_CLASSID,&DMPLEX_GlobalToNaturalEnd);CHKERRQ(ierr); 93 ierr = PetscLogEventRegister("DMPlexNToGBegin", DM_CLASSID,&DMPLEX_NaturalToGlobalBegin);CHKERRQ(ierr); 94 ierr = PetscLogEventRegister("DMPlexNToGEnd", DM_CLASSID,&DMPLEX_NaturalToGlobalEnd);CHKERRQ(ierr); 95 ierr = PetscLogEventRegister("DMPlexStratify", DM_CLASSID,&DMPLEX_Stratify);CHKERRQ(ierr); 96 ierr = PetscLogEventRegister("DMPlexPrealloc", DM_CLASSID,&DMPLEX_Preallocate);CHKERRQ(ierr); 97 ierr = PetscLogEventRegister("DMPlexResidualFE", DM_CLASSID,&DMPLEX_ResidualFEM);CHKERRQ(ierr); 98 ierr = PetscLogEventRegister("DMPlexJacobianFE", DM_CLASSID,&DMPLEX_JacobianFEM);CHKERRQ(ierr); 99 ierr = PetscLogEventRegister("DMPlexInterpFE", DM_CLASSID,&DMPLEX_InterpolatorFEM);CHKERRQ(ierr); 100 ierr = PetscLogEventRegister("DMPlexInjectorFE", DM_CLASSID,&DMPLEX_InjectorFEM);CHKERRQ(ierr); 101 ierr = PetscLogEventRegister("DMPlexIntegralFEM", DM_CLASSID,&DMPLEX_IntegralFEM);CHKERRQ(ierr); 102 ierr = PetscLogEventRegister("DMPlexCreateGmsh", DM_CLASSID,&DMPLEX_CreateGmsh);CHKERRQ(ierr); 103 104 ierr = PetscLogEventRegister("DMSwarmMigrate", DM_CLASSID,&DMSWARM_Migrate);CHKERRQ(ierr); 105 ierr = PetscLogEventRegister("DMSwarmDETSetup", DM_CLASSID,&DMSWARM_DataExchangerTopologySetup);CHKERRQ(ierr); 106 ierr = PetscLogEventRegister("DMSwarmDExBegin", DM_CLASSID,&DMSWARM_DataExchangerBegin);CHKERRQ(ierr); 107 ierr = PetscLogEventRegister("DMSwarmDExEnd", DM_CLASSID,&DMSWARM_DataExchangerEnd);CHKERRQ(ierr); 108 ierr = PetscLogEventRegister("DMSwarmDESendCnt", DM_CLASSID,&DMSWARM_DataExchangerSendCount);CHKERRQ(ierr); 109 ierr = PetscLogEventRegister("DMSwarmDEPack", DM_CLASSID,&DMSWARM_DataExchangerPack);CHKERRQ(ierr); 110 ierr = PetscLogEventRegister("DMSwarmAddPnts", DM_CLASSID,&DMSWARM_AddPoints);CHKERRQ(ierr); 111 ierr = PetscLogEventRegister("DMSwarmRmvPnts", DM_CLASSID,&DMSWARM_RemovePoints);CHKERRQ(ierr); 112 ierr = PetscLogEventRegister("DMSwarmSort", DM_CLASSID,&DMSWARM_Sort);CHKERRQ(ierr); 113 ierr = PetscLogEventRegister("DMSwarmSetSizes", DM_CLASSID,&DMSWARM_SetSizes);CHKERRQ(ierr); 114 115 /* Process info exclusions */ 116 ierr = PetscOptionsGetString(NULL,NULL,"-info_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr); 117 if (opt) { 118 ierr = PetscStrInList("dm",logList,',',&pkg);CHKERRQ(ierr); 119 if (pkg) {ierr = PetscInfoDeactivateClass(DM_CLASSID);CHKERRQ(ierr);} 120 } 121 122 /* Process summary exclusions */ 123 ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr); 124 if (opt) { 125 ierr = PetscStrInList("dm",logList,',',&pkg);CHKERRQ(ierr); 126 if (pkg) {ierr = PetscLogEventExcludeClass(DM_CLASSID);CHKERRQ(ierr);} 127 } 128 129 ierr = DMPlexGenerateRegisterAll();CHKERRQ(ierr); 130 ierr = PetscRegisterFinalize(DMPlexGenerateRegisterDestroy);CHKERRQ(ierr); 131 ierr = PetscRegisterFinalize(DMFinalizePackage);CHKERRQ(ierr); 132 PetscFunctionReturn(0); 133 } 134 #include <petscfe.h> 135 136 static PetscBool PetscFEPackageInitialized = PETSC_FALSE; 137 /*@C 138 PetscFEFinalizePackage - This function finalizes everything in the PetscFE package. It is called 139 from PetscFinalize(). 140 141 Level: developer 142 143 .keywords: PetscFE, initialize, package 144 .seealso: PetscInitialize() 145 @*/ 146 PetscErrorCode PetscFEFinalizePackage(void) 147 { 148 PetscErrorCode ierr; 149 150 PetscFunctionBegin; 151 ierr = PetscFunctionListDestroy(&PetscSpaceList);CHKERRQ(ierr); 152 ierr = PetscFunctionListDestroy(&PetscDualSpaceList);CHKERRQ(ierr); 153 ierr = PetscFunctionListDestroy(&PetscFEList);CHKERRQ(ierr); 154 PetscFEPackageInitialized = PETSC_FALSE; 155 PetscSpaceRegisterAllCalled = PETSC_FALSE; 156 PetscDualSpaceRegisterAllCalled = PETSC_FALSE; 157 PetscFERegisterAllCalled = PETSC_FALSE; 158 PetscFunctionReturn(0); 159 } 160 161 /*@C 162 PetscFEInitializePackage - This function initializes everything in the FE package. It is called 163 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscSpaceCreate() 164 when using static libraries. 165 166 Level: developer 167 168 .keywords: PetscFE, initialize, package 169 .seealso: PetscInitialize() 170 @*/ 171 PetscErrorCode PetscFEInitializePackage(void) 172 { 173 char logList[256]; 174 PetscBool opt,pkg; 175 PetscErrorCode ierr; 176 177 PetscFunctionBegin; 178 if (PetscFEPackageInitialized) PetscFunctionReturn(0); 179 PetscFEPackageInitialized = PETSC_TRUE; 180 181 /* Register Classes */ 182 ierr = PetscClassIdRegister("Linear Space", &PETSCSPACE_CLASSID);CHKERRQ(ierr); 183 ierr = PetscClassIdRegister("Dual Space", &PETSCDUALSPACE_CLASSID);CHKERRQ(ierr); 184 ierr = PetscClassIdRegister("FE Space", &PETSCFE_CLASSID);CHKERRQ(ierr); 185 /* Register Constructors */ 186 ierr = PetscSpaceRegisterAll();CHKERRQ(ierr); 187 ierr = PetscDualSpaceRegisterAll();CHKERRQ(ierr); 188 ierr = PetscFERegisterAll();CHKERRQ(ierr); 189 /* Register Events */ 190 /* Process info exclusions */ 191 ierr = PetscOptionsGetString(NULL,NULL,"-info_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr); 192 if (opt) { 193 ierr = PetscStrInList("fe",logList,',',&pkg);CHKERRQ(ierr); 194 if (pkg) {ierr = PetscInfoDeactivateClass(PETSCFE_CLASSID);CHKERRQ(ierr);} 195 } 196 /* Process summary exclusions */ 197 ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr); 198 if (opt) { 199 ierr = PetscStrInList("fe",logList,',',&pkg);CHKERRQ(ierr); 200 if (pkg) {ierr = PetscLogEventExcludeClass(PETSCFE_CLASSID);CHKERRQ(ierr);} 201 } 202 /* Register package finalizer */ 203 ierr = PetscRegisterFinalize(PetscFEFinalizePackage);CHKERRQ(ierr); 204 PetscFunctionReturn(0); 205 } 206 #include <petscfv.h> 207 208 static PetscBool PetscFVPackageInitialized = PETSC_FALSE; 209 /*@C 210 PetscFVFinalizePackage - This function finalizes everything in the PetscFV package. It is called 211 from PetscFinalize(). 212 213 Level: developer 214 215 .keywords: PetscFV, initialize, package 216 .seealso: PetscInitialize() 217 @*/ 218 PetscErrorCode PetscFVFinalizePackage(void) 219 { 220 PetscErrorCode ierr; 221 222 PetscFunctionBegin; 223 ierr = PetscFunctionListDestroy(&PetscLimiterList);CHKERRQ(ierr); 224 ierr = PetscFunctionListDestroy(&PetscFVList);CHKERRQ(ierr); 225 PetscFVPackageInitialized = PETSC_FALSE; 226 PetscFVRegisterAllCalled = PETSC_FALSE; 227 PetscLimiterRegisterAllCalled = PETSC_FALSE; 228 PetscFunctionReturn(0); 229 } 230 231 /*@C 232 PetscFVInitializePackage - This function initializes everything in the FV package. It is called 233 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscFVCreate() 234 when using static libraries. 235 236 Level: developer 237 238 .keywords: PetscFV, initialize, package 239 .seealso: PetscInitialize() 240 @*/ 241 PetscErrorCode PetscFVInitializePackage(void) 242 { 243 char logList[256]; 244 PetscBool opt,pkg; 245 PetscErrorCode ierr; 246 247 PetscFunctionBegin; 248 if (PetscFVPackageInitialized) PetscFunctionReturn(0); 249 PetscFVPackageInitialized = PETSC_TRUE; 250 251 /* Register Classes */ 252 ierr = PetscClassIdRegister("FV Space", &PETSCFV_CLASSID);CHKERRQ(ierr); 253 ierr = PetscClassIdRegister("Limiter", &PETSCLIMITER_CLASSID);CHKERRQ(ierr); 254 /* Register Constructors */ 255 ierr = PetscFVRegisterAll();CHKERRQ(ierr); 256 /* Register Events */ 257 /* Process info exclusions */ 258 ierr = PetscOptionsGetString(NULL,NULL,"-info_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr); 259 if (opt) { 260 ierr = PetscStrInList("fv",logList,',',&pkg);CHKERRQ(ierr); 261 if (pkg) {ierr = PetscInfoDeactivateClass(PETSCFV_CLASSID);CHKERRQ(ierr);} 262 ierr = PetscStrInList("limiter",logList,',',&pkg);CHKERRQ(ierr); 263 if (pkg) {ierr = PetscInfoDeactivateClass(PETSCLIMITER_CLASSID);CHKERRQ(ierr);} 264 } 265 /* Process summary exclusions */ 266 ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr); 267 if (opt) { 268 ierr = PetscStrInList("fv",logList,',',&pkg);CHKERRQ(ierr); 269 if (pkg) {ierr = PetscLogEventExcludeClass(PETSCFV_CLASSID);CHKERRQ(ierr);} 270 ierr = PetscStrInList("limiter",logList,',',&pkg);CHKERRQ(ierr); 271 if (pkg) {ierr = PetscLogEventExcludeClass(PETSCLIMITER_CLASSID);CHKERRQ(ierr);} 272 } 273 /* Register package finalizer */ 274 ierr = PetscRegisterFinalize(PetscFVFinalizePackage);CHKERRQ(ierr); 275 PetscFunctionReturn(0); 276 } 277 #include <petscds.h> 278 279 static PetscBool PetscDSPackageInitialized = PETSC_FALSE; 280 /*@C 281 PetscDSFinalizePackage - This function finalizes everything in the PetscDS package. It is called 282 from PetscFinalize(). 283 284 Level: developer 285 286 .keywords: PetscDS, initialize, package 287 .seealso: PetscInitialize() 288 @*/ 289 PetscErrorCode PetscDSFinalizePackage(void) 290 { 291 PetscErrorCode ierr; 292 293 PetscFunctionBegin; 294 ierr = PetscFunctionListDestroy(&PetscDSList);CHKERRQ(ierr); 295 PetscDSPackageInitialized = PETSC_FALSE; 296 PetscDSRegisterAllCalled = PETSC_FALSE; 297 PetscFunctionReturn(0); 298 } 299 300 /*@C 301 PetscDSInitializePackage - This function initializes everything in the DS package. It is called 302 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscDSCreate() 303 when using static libraries. 304 305 Level: developer 306 307 .keywords: PetscDS, initialize, package 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