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