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 #endif 36 37 /*@C 38 DMInitializePackage - This function initializes everything in the DM package. It is called 39 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to AOCreate() 40 or DMDACreate() when using static libraries. 41 42 Level: developer 43 44 .keywords: AO, initialize, package 45 .seealso: PetscInitialize() 46 @*/ 47 PetscErrorCode DMInitializePackage(void) 48 { 49 char logList[256]; 50 char *className; 51 PetscBool opt; 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 #endif 65 ierr = PetscSectionSymRegister(PETSCSECTIONSYMLABEL,PetscSectionSymCreate_Label);CHKERRQ(ierr); 66 67 /* Register Constructors */ 68 ierr = DMRegisterAll();CHKERRQ(ierr); 69 /* Register Events */ 70 ierr = PetscLogEventRegister("DMConvert", DM_CLASSID,&DM_Convert);CHKERRQ(ierr); 71 ierr = PetscLogEventRegister("DMGlobalToLocal", DM_CLASSID,&DM_GlobalToLocal);CHKERRQ(ierr); 72 ierr = PetscLogEventRegister("DMLocalToGlobal", DM_CLASSID,&DM_LocalToGlobal);CHKERRQ(ierr); 73 ierr = PetscLogEventRegister("DMLocatePoints", DM_CLASSID,&DM_LocatePoints);CHKERRQ(ierr); 74 ierr = PetscLogEventRegister("DMCoarsen", DM_CLASSID,&DM_Coarsen);CHKERRQ(ierr); 75 ierr = PetscLogEventRegister("DMCreateInterp", DM_CLASSID,&DM_CreateInterpolation);CHKERRQ(ierr); 76 ierr = PetscLogEventRegister("DMCreateRestrict", DM_CLASSID,&DM_CreateRestriction);CHKERRQ(ierr); 77 78 ierr = PetscLogEventRegister("DMDALocalADFunc", DM_CLASSID,&DMDA_LocalADFunction);CHKERRQ(ierr); 79 80 ierr = PetscLogEventRegister("Mesh Partition", PETSCPARTITIONER_CLASSID,&PETSCPARTITIONER_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("DMPlexDistribSF", DM_CLASSID,&DMPLEX_DistributeSF);CHKERRQ(ierr); 87 ierr = PetscLogEventRegister("DMPlexDistribOL", 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, 256, &opt);CHKERRQ(ierr); 117 if (opt) { 118 ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr); 119 if (className) { 120 ierr = PetscInfoDeactivateClass(DM_CLASSID);CHKERRQ(ierr); 121 } 122 } 123 /* Process summary exclusions */ 124 ierr = PetscOptionsGetString(NULL,NULL, "-log_exclude", logList, 256, &opt);CHKERRQ(ierr); 125 if (opt) { 126 ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr); 127 if (className) { 128 ierr = PetscLogEventDeactivateClass(DM_CLASSID);CHKERRQ(ierr); 129 } 130 } 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 char *className; 175 PetscBool opt; 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 187 /* Register Constructors */ 188 ierr = PetscSpaceRegisterAll();CHKERRQ(ierr); 189 ierr = PetscDualSpaceRegisterAll();CHKERRQ(ierr); 190 ierr = PetscFERegisterAll();CHKERRQ(ierr); 191 /* Register Events */ 192 /* Process info exclusions */ 193 ierr = PetscOptionsGetString(NULL,NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 194 if (opt) { 195 ierr = PetscStrstr(logList, "fe", &className);CHKERRQ(ierr); 196 if (className) {ierr = PetscInfoDeactivateClass(PETSCFE_CLASSID);CHKERRQ(ierr);} 197 } 198 /* Process summary exclusions */ 199 ierr = PetscOptionsGetString(NULL,NULL, "-log_exclude", logList, 256, &opt);CHKERRQ(ierr); 200 if (opt) { 201 ierr = PetscStrstr(logList, "fe", &className);CHKERRQ(ierr); 202 if (className) {ierr = PetscLogEventDeactivateClass(PETSCFE_CLASSID);CHKERRQ(ierr);} 203 } 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 char *className; 246 PetscBool opt; 247 PetscErrorCode ierr; 248 249 PetscFunctionBegin; 250 if (PetscFVPackageInitialized) PetscFunctionReturn(0); 251 PetscFVPackageInitialized = PETSC_TRUE; 252 253 /* Register Classes */ 254 ierr = PetscClassIdRegister("FV Space", &PETSCFV_CLASSID);CHKERRQ(ierr); 255 ierr = PetscClassIdRegister("Limiter", &PETSCLIMITER_CLASSID);CHKERRQ(ierr); 256 257 /* Register Constructors */ 258 ierr = PetscFVRegisterAll();CHKERRQ(ierr); 259 /* Register Events */ 260 /* Process info exclusions */ 261 ierr = PetscOptionsGetString(NULL,NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 262 if (opt) { 263 ierr = PetscStrstr(logList, "fv", &className);CHKERRQ(ierr); 264 if (className) {ierr = PetscInfoDeactivateClass(PETSCFV_CLASSID);CHKERRQ(ierr);} 265 ierr = PetscStrstr(logList, "limiter", &className);CHKERRQ(ierr); 266 if (className) {ierr = PetscInfoDeactivateClass(PETSCLIMITER_CLASSID);CHKERRQ(ierr);} 267 } 268 /* Process summary exclusions */ 269 ierr = PetscOptionsGetString(NULL,NULL, "-log_exclude", logList, 256, &opt);CHKERRQ(ierr); 270 if (opt) { 271 ierr = PetscStrstr(logList, "fv", &className);CHKERRQ(ierr); 272 if (className) {ierr = PetscLogEventDeactivateClass(PETSCFV_CLASSID);CHKERRQ(ierr);} 273 ierr = PetscStrstr(logList, "limiter", &className);CHKERRQ(ierr); 274 if (className) {ierr = PetscLogEventDeactivateClass(PETSCLIMITER_CLASSID);CHKERRQ(ierr);} 275 } 276 ierr = PetscRegisterFinalize(PetscFVFinalizePackage);CHKERRQ(ierr); 277 PetscFunctionReturn(0); 278 } 279 #include <petscds.h> 280 281 static PetscBool PetscDSPackageInitialized = PETSC_FALSE; 282 /*@C 283 PetscDSFinalizePackage - This function finalizes everything in the PetscDS package. It is called 284 from PetscFinalize(). 285 286 Level: developer 287 288 .keywords: PetscDS, initialize, package 289 .seealso: PetscInitialize() 290 @*/ 291 PetscErrorCode PetscDSFinalizePackage(void) 292 { 293 PetscErrorCode ierr; 294 295 PetscFunctionBegin; 296 ierr = PetscFunctionListDestroy(&PetscDSList);CHKERRQ(ierr); 297 PetscDSPackageInitialized = PETSC_FALSE; 298 PetscDSRegisterAllCalled = PETSC_FALSE; 299 PetscFunctionReturn(0); 300 } 301 302 /*@C 303 PetscDSInitializePackage - This function initializes everything in the DS package. It is called 304 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscDSCreate() 305 when using static libraries. 306 307 Level: developer 308 309 .keywords: PetscDS, initialize, package 310 .seealso: PetscInitialize() 311 @*/ 312 PetscErrorCode PetscDSInitializePackage(void) 313 { 314 char logList[256]; 315 char *className; 316 PetscBool opt; 317 PetscErrorCode ierr; 318 319 PetscFunctionBegin; 320 if (PetscDSPackageInitialized) PetscFunctionReturn(0); 321 PetscDSPackageInitialized = PETSC_TRUE; 322 323 /* Register Classes */ 324 ierr = PetscClassIdRegister("Discrete System", &PETSCDS_CLASSID);CHKERRQ(ierr); 325 326 /* Register Constructors */ 327 ierr = PetscDSRegisterAll();CHKERRQ(ierr); 328 /* Register Events */ 329 /* Process info exclusions */ 330 ierr = PetscOptionsGetString(NULL,NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 331 if (opt) { 332 ierr = PetscStrstr(logList, "ds", &className);CHKERRQ(ierr); 333 if (className) {ierr = PetscInfoDeactivateClass(PETSCDS_CLASSID);CHKERRQ(ierr);} 334 } 335 /* Process summary exclusions */ 336 ierr = PetscOptionsGetString(NULL,NULL, "-log_exclude", logList, 256, &opt);CHKERRQ(ierr); 337 if (opt) { 338 ierr = PetscStrstr(logList, "ds", &className);CHKERRQ(ierr); 339 if (className) {ierr = PetscLogEventDeactivateClass(PETSCDS_CLASSID);CHKERRQ(ierr);} 340 } 341 ierr = PetscRegisterFinalize(PetscDSFinalizePackage);CHKERRQ(ierr); 342 PetscFunctionReturn(0); 343 } 344 345 #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES) 346 /* 347 PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 348 349 This one registers all the mesh generators and partitioners that are in 350 the basic DM library. 351 352 */ 353 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void) 354 { 355 PetscErrorCode ierr; 356 357 PetscFunctionBegin; 358 ierr = AOInitializePackage();CHKERRQ(ierr); 359 ierr = DMInitializePackage();CHKERRQ(ierr); 360 ierr = PetscFEInitializePackage();CHKERRQ(ierr); 361 ierr = PetscFVInitializePackage();CHKERRQ(ierr); 362 PetscFunctionReturn(0); 363 } 364 365 #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */ 366