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