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