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