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