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_petscdm() when using dynamic libraries, and on the first call to AOCreate() 42 or DMDACreate() when using shared or 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("DM Label",&DMLABEL_CLASSID);CHKERRQ(ierr); 62 ierr = PetscClassIdRegister("GraphPartitioner",&PETSCPARTITIONER_CLASSID);CHKERRQ(ierr); 63 64 #if defined(PETSC_HAVE_HYPRE) 65 ierr = MatRegister(MATHYPRESTRUCT, MatCreate_HYPREStruct);CHKERRQ(ierr); 66 ierr = MatRegister(MATHYPRESSTRUCT, MatCreate_HYPRESStruct);CHKERRQ(ierr); 67 #endif 68 ierr = PetscSectionSymRegister(PETSCSECTIONSYMLABEL,PetscSectionSymCreate_Label);CHKERRQ(ierr); 69 70 /* Register Constructors */ 71 ierr = DMRegisterAll();CHKERRQ(ierr); 72 /* Register Events */ 73 ierr = PetscLogEventRegister("DMConvert", DM_CLASSID,&DM_Convert);CHKERRQ(ierr); 74 ierr = PetscLogEventRegister("DMGlobalToLocal", DM_CLASSID,&DM_GlobalToLocal);CHKERRQ(ierr); 75 ierr = PetscLogEventRegister("DMLocalToGlobal", DM_CLASSID,&DM_LocalToGlobal);CHKERRQ(ierr); 76 ierr = PetscLogEventRegister("DMLocatePoints", DM_CLASSID,&DM_LocatePoints);CHKERRQ(ierr); 77 ierr = PetscLogEventRegister("DMCoarsen", DM_CLASSID,&DM_Coarsen);CHKERRQ(ierr); 78 ierr = PetscLogEventRegister("DMCreateInterp", DM_CLASSID,&DM_CreateInterpolation);CHKERRQ(ierr); 79 ierr = PetscLogEventRegister("DMCreateRestrict", DM_CLASSID,&DM_CreateRestriction);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 .keywords: PetscFE, initialize, package 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 .keywords: PetscFE, initialize, package 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 .keywords: PetscFV, initialize, package 224 .seealso: PetscInitialize() 225 @*/ 226 PetscErrorCode PetscFVFinalizePackage(void) 227 { 228 PetscErrorCode ierr; 229 230 PetscFunctionBegin; 231 ierr = PetscFunctionListDestroy(&PetscLimiterList);CHKERRQ(ierr); 232 ierr = PetscFunctionListDestroy(&PetscFVList);CHKERRQ(ierr); 233 PetscFVPackageInitialized = PETSC_FALSE; 234 PetscFVRegisterAllCalled = PETSC_FALSE; 235 PetscLimiterRegisterAllCalled = PETSC_FALSE; 236 PetscFunctionReturn(0); 237 } 238 239 /*@C 240 PetscFVInitializePackage - This function initializes everything in the FV package. It is called 241 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscFVCreate() 242 when using static libraries. 243 244 Level: developer 245 246 .keywords: PetscFV, initialize, package 247 .seealso: PetscInitialize() 248 @*/ 249 PetscErrorCode PetscFVInitializePackage(void) 250 { 251 char logList[256]; 252 PetscBool opt,pkg; 253 PetscErrorCode ierr; 254 255 PetscFunctionBegin; 256 if (PetscFVPackageInitialized) PetscFunctionReturn(0); 257 PetscFVPackageInitialized = PETSC_TRUE; 258 259 /* Register Classes */ 260 ierr = PetscClassIdRegister("FV Space", &PETSCFV_CLASSID);CHKERRQ(ierr); 261 ierr = PetscClassIdRegister("Limiter", &PETSCLIMITER_CLASSID);CHKERRQ(ierr); 262 /* Register Constructors */ 263 ierr = PetscFVRegisterAll();CHKERRQ(ierr); 264 /* Register Events */ 265 /* Process info exclusions */ 266 ierr = PetscOptionsGetString(NULL,NULL,"-info_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr); 267 if (opt) { 268 ierr = PetscStrInList("fv",logList,',',&pkg);CHKERRQ(ierr); 269 if (pkg) {ierr = PetscInfoDeactivateClass(PETSCFV_CLASSID);CHKERRQ(ierr);} 270 ierr = PetscStrInList("limiter",logList,',',&pkg);CHKERRQ(ierr); 271 if (pkg) {ierr = PetscInfoDeactivateClass(PETSCLIMITER_CLASSID);CHKERRQ(ierr);} 272 } 273 /* Process summary exclusions */ 274 ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr); 275 if (opt) { 276 ierr = PetscStrInList("fv",logList,',',&pkg);CHKERRQ(ierr); 277 if (pkg) {ierr = PetscLogEventExcludeClass(PETSCFV_CLASSID);CHKERRQ(ierr);} 278 ierr = PetscStrInList("limiter",logList,',',&pkg);CHKERRQ(ierr); 279 if (pkg) {ierr = PetscLogEventExcludeClass(PETSCLIMITER_CLASSID);CHKERRQ(ierr);} 280 } 281 /* Register package finalizer */ 282 ierr = PetscRegisterFinalize(PetscFVFinalizePackage);CHKERRQ(ierr); 283 PetscFunctionReturn(0); 284 } 285 #include <petscds.h> 286 287 static PetscBool PetscDSPackageInitialized = PETSC_FALSE; 288 /*@C 289 PetscDSFinalizePackage - This function finalizes everything in the PetscDS package. It is called 290 from PetscFinalize(). 291 292 Level: developer 293 294 .keywords: PetscDS, initialize, package 295 .seealso: PetscInitialize() 296 @*/ 297 PetscErrorCode PetscDSFinalizePackage(void) 298 { 299 PetscErrorCode ierr; 300 301 PetscFunctionBegin; 302 ierr = PetscFunctionListDestroy(&PetscDSList);CHKERRQ(ierr); 303 PetscDSPackageInitialized = PETSC_FALSE; 304 PetscDSRegisterAllCalled = PETSC_FALSE; 305 PetscFunctionReturn(0); 306 } 307 308 /*@C 309 PetscDSInitializePackage - This function initializes everything in the DS package. It is called 310 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscDSCreate() 311 when using static libraries. 312 313 Level: developer 314 315 .keywords: PetscDS, initialize, package 316 .seealso: PetscInitialize() 317 @*/ 318 PetscErrorCode PetscDSInitializePackage(void) 319 { 320 char logList[256]; 321 PetscBool opt,pkg; 322 PetscErrorCode ierr; 323 324 PetscFunctionBegin; 325 if (PetscDSPackageInitialized) PetscFunctionReturn(0); 326 PetscDSPackageInitialized = PETSC_TRUE; 327 328 /* Register Classes */ 329 ierr = PetscClassIdRegister("Discrete System", &PETSCDS_CLASSID);CHKERRQ(ierr); 330 /* Register Constructors */ 331 ierr = PetscDSRegisterAll();CHKERRQ(ierr); 332 /* Register Events */ 333 /* Process info exclusions */ 334 ierr = PetscOptionsGetString(NULL,NULL,"-info_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr); 335 if (opt) { 336 ierr = PetscStrInList("ds",logList,',',&pkg);CHKERRQ(ierr); 337 if (pkg) {ierr = PetscInfoDeactivateClass(PETSCDS_CLASSID);CHKERRQ(ierr);} 338 } 339 /* Process summary exclusions */ 340 ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr); 341 if (opt) { 342 ierr = PetscStrInList("ds",logList,',',&pkg);CHKERRQ(ierr); 343 if (pkg) {ierr = PetscLogEventExcludeClass(PETSCDS_CLASSID);CHKERRQ(ierr);} 344 } 345 /* Register package finalizer */ 346 ierr = PetscRegisterFinalize(PetscDSFinalizePackage);CHKERRQ(ierr); 347 PetscFunctionReturn(0); 348 } 349 350 #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES) 351 /* 352 PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 353 354 This one registers all the mesh generators and partitioners that are in 355 the basic DM library. 356 357 */ 358 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void) 359 { 360 PetscErrorCode ierr; 361 362 PetscFunctionBegin; 363 ierr = AOInitializePackage();CHKERRQ(ierr); 364 ierr = DMInitializePackage();CHKERRQ(ierr); 365 ierr = PetscFEInitializePackage();CHKERRQ(ierr); 366 ierr = PetscFVInitializePackage();CHKERRQ(ierr); 367 ierr = DMFieldInitializePackage();CHKERRQ(ierr); 368 PetscFunctionReturn(0); 369 } 370 371 #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */ 372