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 111 /* Process info exclusions */ 112 ierr = PetscOptionsGetString(NULL,NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 113 if (opt) { 114 ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr); 115 if (className) { 116 ierr = PetscInfoDeactivateClass(DM_CLASSID);CHKERRQ(ierr); 117 } 118 } 119 /* Process summary exclusions */ 120 ierr = PetscOptionsGetString(NULL,NULL, "-log_exclude", logList, 256, &opt);CHKERRQ(ierr); 121 if (opt) { 122 ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr); 123 if (className) { 124 ierr = PetscLogEventDeactivateClass(DM_CLASSID);CHKERRQ(ierr); 125 } 126 } 127 ierr = PetscRegisterFinalize(DMFinalizePackage);CHKERRQ(ierr); 128 PetscFunctionReturn(0); 129 } 130 #include <petscfe.h> 131 132 static PetscBool PetscFEPackageInitialized = PETSC_FALSE; 133 /*@C 134 PetscFEFinalizePackage - This function finalizes everything in the PetscFE package. It is called 135 from PetscFinalize(). 136 137 Level: developer 138 139 .keywords: PetscFE, initialize, package 140 .seealso: PetscInitialize() 141 @*/ 142 PetscErrorCode PetscFEFinalizePackage(void) 143 { 144 PetscErrorCode ierr; 145 146 PetscFunctionBegin; 147 ierr = PetscFunctionListDestroy(&PetscSpaceList);CHKERRQ(ierr); 148 ierr = PetscFunctionListDestroy(&PetscDualSpaceList);CHKERRQ(ierr); 149 ierr = PetscFunctionListDestroy(&PetscFEList);CHKERRQ(ierr); 150 PetscFEPackageInitialized = PETSC_FALSE; 151 PetscSpaceRegisterAllCalled = PETSC_FALSE; 152 PetscDualSpaceRegisterAllCalled = PETSC_FALSE; 153 PetscFERegisterAllCalled = PETSC_FALSE; 154 PetscFunctionReturn(0); 155 } 156 157 /*@C 158 PetscFEInitializePackage - This function initializes everything in the FE package. It is called 159 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscSpaceCreate() 160 when using static libraries. 161 162 Level: developer 163 164 .keywords: PetscFE, initialize, package 165 .seealso: PetscInitialize() 166 @*/ 167 PetscErrorCode PetscFEInitializePackage(void) 168 { 169 char logList[256]; 170 char *className; 171 PetscBool opt; 172 PetscErrorCode ierr; 173 174 PetscFunctionBegin; 175 if (PetscFEPackageInitialized) PetscFunctionReturn(0); 176 PetscFEPackageInitialized = PETSC_TRUE; 177 178 /* Register Classes */ 179 ierr = PetscClassIdRegister("Linear Space", &PETSCSPACE_CLASSID);CHKERRQ(ierr); 180 ierr = PetscClassIdRegister("Dual Space", &PETSCDUALSPACE_CLASSID);CHKERRQ(ierr); 181 ierr = PetscClassIdRegister("FE Space", &PETSCFE_CLASSID);CHKERRQ(ierr); 182 183 /* Register Constructors */ 184 ierr = PetscSpaceRegisterAll();CHKERRQ(ierr); 185 ierr = PetscDualSpaceRegisterAll();CHKERRQ(ierr); 186 ierr = PetscFERegisterAll();CHKERRQ(ierr); 187 /* Register Events */ 188 /* Process info exclusions */ 189 ierr = PetscOptionsGetString(NULL,NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 190 if (opt) { 191 ierr = PetscStrstr(logList, "fe", &className);CHKERRQ(ierr); 192 if (className) {ierr = PetscInfoDeactivateClass(PETSCFE_CLASSID);CHKERRQ(ierr);} 193 } 194 /* Process summary exclusions */ 195 ierr = PetscOptionsGetString(NULL,NULL, "-log_exclude", logList, 256, &opt);CHKERRQ(ierr); 196 if (opt) { 197 ierr = PetscStrstr(logList, "fe", &className);CHKERRQ(ierr); 198 if (className) {ierr = PetscLogEventDeactivateClass(PETSCFE_CLASSID);CHKERRQ(ierr);} 199 } 200 ierr = PetscRegisterFinalize(PetscFEFinalizePackage);CHKERRQ(ierr); 201 PetscFunctionReturn(0); 202 } 203 #include <petscfv.h> 204 205 static PetscBool PetscFVPackageInitialized = PETSC_FALSE; 206 /*@C 207 PetscFVFinalizePackage - This function finalizes everything in the PetscFV package. It is called 208 from PetscFinalize(). 209 210 Level: developer 211 212 .keywords: PetscFV, initialize, package 213 .seealso: PetscInitialize() 214 @*/ 215 PetscErrorCode PetscFVFinalizePackage(void) 216 { 217 PetscErrorCode ierr; 218 219 PetscFunctionBegin; 220 ierr = PetscFunctionListDestroy(&PetscLimiterList);CHKERRQ(ierr); 221 ierr = PetscFunctionListDestroy(&PetscFVList);CHKERRQ(ierr); 222 PetscFVPackageInitialized = PETSC_FALSE; 223 PetscFVRegisterAllCalled = PETSC_FALSE; 224 PetscLimiterRegisterAllCalled = PETSC_FALSE; 225 PetscFunctionReturn(0); 226 } 227 228 /*@C 229 PetscFVInitializePackage - This function initializes everything in the FV package. It is called 230 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscFVCreate() 231 when using static libraries. 232 233 Level: developer 234 235 .keywords: PetscFV, initialize, package 236 .seealso: PetscInitialize() 237 @*/ 238 PetscErrorCode PetscFVInitializePackage(void) 239 { 240 char logList[256]; 241 char *className; 242 PetscBool opt; 243 PetscErrorCode ierr; 244 245 PetscFunctionBegin; 246 if (PetscFVPackageInitialized) PetscFunctionReturn(0); 247 PetscFVPackageInitialized = PETSC_TRUE; 248 249 /* Register Classes */ 250 ierr = PetscClassIdRegister("FV Space", &PETSCFV_CLASSID);CHKERRQ(ierr); 251 ierr = PetscClassIdRegister("Limiter", &PETSCLIMITER_CLASSID);CHKERRQ(ierr); 252 253 /* Register Constructors */ 254 ierr = PetscFVRegisterAll();CHKERRQ(ierr); 255 /* Register Events */ 256 /* Process info exclusions */ 257 ierr = PetscOptionsGetString(NULL,NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 258 if (opt) { 259 ierr = PetscStrstr(logList, "fv", &className);CHKERRQ(ierr); 260 if (className) {ierr = PetscInfoDeactivateClass(PETSCFV_CLASSID);CHKERRQ(ierr);} 261 ierr = PetscStrstr(logList, "limiter", &className);CHKERRQ(ierr); 262 if (className) {ierr = PetscInfoDeactivateClass(PETSCLIMITER_CLASSID);CHKERRQ(ierr);} 263 } 264 /* Process summary exclusions */ 265 ierr = PetscOptionsGetString(NULL,NULL, "-log_exclude", logList, 256, &opt);CHKERRQ(ierr); 266 if (opt) { 267 ierr = PetscStrstr(logList, "fv", &className);CHKERRQ(ierr); 268 if (className) {ierr = PetscLogEventDeactivateClass(PETSCFV_CLASSID);CHKERRQ(ierr);} 269 ierr = PetscStrstr(logList, "limiter", &className);CHKERRQ(ierr); 270 if (className) {ierr = PetscLogEventDeactivateClass(PETSCLIMITER_CLASSID);CHKERRQ(ierr);} 271 } 272 ierr = PetscRegisterFinalize(PetscFVFinalizePackage);CHKERRQ(ierr); 273 PetscFunctionReturn(0); 274 } 275 #include <petscds.h> 276 277 static PetscBool PetscDSPackageInitialized = PETSC_FALSE; 278 /*@C 279 PetscDSFinalizePackage - This function finalizes everything in the PetscDS package. It is called 280 from PetscFinalize(). 281 282 Level: developer 283 284 .keywords: PetscDS, initialize, package 285 .seealso: PetscInitialize() 286 @*/ 287 PetscErrorCode PetscDSFinalizePackage(void) 288 { 289 PetscErrorCode ierr; 290 291 PetscFunctionBegin; 292 ierr = PetscFunctionListDestroy(&PetscDSList);CHKERRQ(ierr); 293 PetscDSPackageInitialized = PETSC_FALSE; 294 PetscDSRegisterAllCalled = PETSC_FALSE; 295 PetscFunctionReturn(0); 296 } 297 298 /*@C 299 PetscDSInitializePackage - This function initializes everything in the DS package. It is called 300 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscDSCreate() 301 when using static libraries. 302 303 Level: developer 304 305 .keywords: PetscDS, initialize, package 306 .seealso: PetscInitialize() 307 @*/ 308 PetscErrorCode PetscDSInitializePackage(void) 309 { 310 char logList[256]; 311 char *className; 312 PetscBool opt; 313 PetscErrorCode ierr; 314 315 PetscFunctionBegin; 316 if (PetscDSPackageInitialized) PetscFunctionReturn(0); 317 PetscDSPackageInitialized = PETSC_TRUE; 318 319 /* Register Classes */ 320 ierr = PetscClassIdRegister("Discrete System", &PETSCDS_CLASSID);CHKERRQ(ierr); 321 322 /* Register Constructors */ 323 ierr = PetscDSRegisterAll();CHKERRQ(ierr); 324 /* Register Events */ 325 /* Process info exclusions */ 326 ierr = PetscOptionsGetString(NULL,NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 327 if (opt) { 328 ierr = PetscStrstr(logList, "ds", &className);CHKERRQ(ierr); 329 if (className) {ierr = PetscInfoDeactivateClass(PETSCDS_CLASSID);CHKERRQ(ierr);} 330 } 331 /* Process summary exclusions */ 332 ierr = PetscOptionsGetString(NULL,NULL, "-log_exclude", logList, 256, &opt);CHKERRQ(ierr); 333 if (opt) { 334 ierr = PetscStrstr(logList, "ds", &className);CHKERRQ(ierr); 335 if (className) {ierr = PetscLogEventDeactivateClass(PETSCDS_CLASSID);CHKERRQ(ierr);} 336 } 337 ierr = PetscRegisterFinalize(PetscDSFinalizePackage);CHKERRQ(ierr); 338 PetscFunctionReturn(0); 339 } 340 341 #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES) 342 /* 343 PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 344 345 This one registers all the mesh generators and partitioners that are in 346 the basic DM library. 347 348 */ 349 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void) 350 { 351 PetscErrorCode ierr; 352 353 PetscFunctionBegin; 354 ierr = AOInitializePackage();CHKERRQ(ierr); 355 ierr = DMInitializePackage();CHKERRQ(ierr); 356 ierr = PetscFEInitializePackage();CHKERRQ(ierr); 357 ierr = PetscFVInitializePackage();CHKERRQ(ierr); 358 PetscFunctionReturn(0); 359 } 360 361 #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */ 362