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