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("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 /* Process info exclusions */ 106 ierr = PetscOptionsGetString(NULL,NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 107 if (opt) { 108 ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr); 109 if (className) { 110 ierr = PetscInfoDeactivateClass(DM_CLASSID);CHKERRQ(ierr); 111 } 112 } 113 /* Process summary exclusions */ 114 ierr = PetscOptionsGetString(NULL,NULL, "-log_exclude", logList, 256, &opt);CHKERRQ(ierr); 115 if (opt) { 116 ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr); 117 if (className) { 118 ierr = PetscLogEventDeactivateClass(DM_CLASSID);CHKERRQ(ierr); 119 } 120 } 121 ierr = PetscRegisterFinalize(DMFinalizePackage);CHKERRQ(ierr); 122 PetscFunctionReturn(0); 123 } 124 #include <petscfe.h> 125 126 static PetscBool PetscFEPackageInitialized = PETSC_FALSE; 127 #undef __FUNCT__ 128 #define __FUNCT__ "PetscFEFinalizePackage" 129 /*@C 130 PetscFEFinalizePackage - This function finalizes everything in the PetscFE package. It is called 131 from PetscFinalize(). 132 133 Level: developer 134 135 .keywords: PetscFE, initialize, package 136 .seealso: PetscInitialize() 137 @*/ 138 PetscErrorCode PetscFEFinalizePackage(void) 139 { 140 PetscErrorCode ierr; 141 142 PetscFunctionBegin; 143 ierr = PetscFunctionListDestroy(&PetscSpaceList);CHKERRQ(ierr); 144 ierr = PetscFunctionListDestroy(&PetscDualSpaceList);CHKERRQ(ierr); 145 ierr = PetscFunctionListDestroy(&PetscFEList);CHKERRQ(ierr); 146 PetscFEPackageInitialized = PETSC_FALSE; 147 PetscSpaceRegisterAllCalled = PETSC_FALSE; 148 PetscDualSpaceRegisterAllCalled = PETSC_FALSE; 149 PetscFERegisterAllCalled = PETSC_FALSE; 150 PetscFunctionReturn(0); 151 } 152 153 #undef __FUNCT__ 154 #define __FUNCT__ "PetscFEInitializePackage" 155 /*@C 156 PetscFEInitializePackage - This function initializes everything in the FE package. It is called 157 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscSpaceCreate() 158 when using static libraries. 159 160 Level: developer 161 162 .keywords: PetscFE, initialize, package 163 .seealso: PetscInitialize() 164 @*/ 165 PetscErrorCode PetscFEInitializePackage(void) 166 { 167 char logList[256]; 168 char *className; 169 PetscBool opt; 170 PetscErrorCode ierr; 171 172 PetscFunctionBegin; 173 if (PetscFEPackageInitialized) PetscFunctionReturn(0); 174 PetscFEPackageInitialized = PETSC_TRUE; 175 176 /* Register Classes */ 177 ierr = PetscClassIdRegister("Linear Space", &PETSCSPACE_CLASSID);CHKERRQ(ierr); 178 ierr = PetscClassIdRegister("Dual Space", &PETSCDUALSPACE_CLASSID);CHKERRQ(ierr); 179 ierr = PetscClassIdRegister("FE Space", &PETSCFE_CLASSID);CHKERRQ(ierr); 180 181 /* Register Constructors */ 182 ierr = PetscSpaceRegisterAll();CHKERRQ(ierr); 183 ierr = PetscDualSpaceRegisterAll();CHKERRQ(ierr); 184 ierr = PetscFERegisterAll();CHKERRQ(ierr); 185 /* Register Events */ 186 /* Process info exclusions */ 187 ierr = PetscOptionsGetString(NULL,NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 188 if (opt) { 189 ierr = PetscStrstr(logList, "fe", &className);CHKERRQ(ierr); 190 if (className) {ierr = PetscInfoDeactivateClass(PETSCFE_CLASSID);CHKERRQ(ierr);} 191 } 192 /* Process summary exclusions */ 193 ierr = PetscOptionsGetString(NULL,NULL, "-log_exclude", logList, 256, &opt);CHKERRQ(ierr); 194 if (opt) { 195 ierr = PetscStrstr(logList, "fe", &className);CHKERRQ(ierr); 196 if (className) {ierr = PetscLogEventDeactivateClass(PETSCFE_CLASSID);CHKERRQ(ierr);} 197 } 198 ierr = PetscRegisterFinalize(PetscFEFinalizePackage);CHKERRQ(ierr); 199 PetscFunctionReturn(0); 200 } 201 #include <petscfv.h> 202 203 static PetscBool PetscFVPackageInitialized = PETSC_FALSE; 204 #undef __FUNCT__ 205 #define __FUNCT__ "PetscFVFinalizePackage" 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 #undef __FUNCT__ 229 #define __FUNCT__ "PetscFVInitializePackage" 230 /*@C 231 PetscFVInitializePackage - This function initializes everything in the FV package. It is called 232 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscFVCreate() 233 when using static libraries. 234 235 Level: developer 236 237 .keywords: PetscFV, initialize, package 238 .seealso: PetscInitialize() 239 @*/ 240 PetscErrorCode PetscFVInitializePackage(void) 241 { 242 char logList[256]; 243 char *className; 244 PetscBool opt; 245 PetscErrorCode ierr; 246 247 PetscFunctionBegin; 248 if (PetscFVPackageInitialized) PetscFunctionReturn(0); 249 PetscFVPackageInitialized = PETSC_TRUE; 250 251 /* Register Classes */ 252 ierr = PetscClassIdRegister("FV Space", &PETSCFV_CLASSID);CHKERRQ(ierr); 253 ierr = PetscClassIdRegister("Limiter", &PETSCLIMITER_CLASSID);CHKERRQ(ierr); 254 255 /* Register Constructors */ 256 ierr = PetscFVRegisterAll();CHKERRQ(ierr); 257 /* Register Events */ 258 /* Process info exclusions */ 259 ierr = PetscOptionsGetString(NULL,NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 260 if (opt) { 261 ierr = PetscStrstr(logList, "fv", &className);CHKERRQ(ierr); 262 if (className) {ierr = PetscInfoDeactivateClass(PETSCFV_CLASSID);CHKERRQ(ierr);} 263 ierr = PetscStrstr(logList, "limiter", &className);CHKERRQ(ierr); 264 if (className) {ierr = PetscInfoDeactivateClass(PETSCLIMITER_CLASSID);CHKERRQ(ierr);} 265 } 266 /* Process summary exclusions */ 267 ierr = PetscOptionsGetString(NULL,NULL, "-log_exclude", logList, 256, &opt);CHKERRQ(ierr); 268 if (opt) { 269 ierr = PetscStrstr(logList, "fv", &className);CHKERRQ(ierr); 270 if (className) {ierr = PetscLogEventDeactivateClass(PETSCFV_CLASSID);CHKERRQ(ierr);} 271 ierr = PetscStrstr(logList, "limiter", &className);CHKERRQ(ierr); 272 if (className) {ierr = PetscLogEventDeactivateClass(PETSCLIMITER_CLASSID);CHKERRQ(ierr);} 273 } 274 ierr = PetscRegisterFinalize(PetscFVFinalizePackage);CHKERRQ(ierr); 275 PetscFunctionReturn(0); 276 } 277 #include <petscds.h> 278 279 static PetscBool PetscDSPackageInitialized = PETSC_FALSE; 280 #undef __FUNCT__ 281 #define __FUNCT__ "PetscDSFinalizePackage" 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 #undef __FUNCT__ 303 #define __FUNCT__ "PetscDSInitializePackage" 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 #undef __FUNCT__ 349 #define __FUNCT__ "PetscDLLibraryRegister_petscdm" 350 /* 351 PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 352 353 This one registers all the mesh generators and partitioners that are in 354 the basic DM library. 355 356 */ 357 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void) 358 { 359 PetscErrorCode ierr; 360 361 PetscFunctionBegin; 362 ierr = AOInitializePackage();CHKERRQ(ierr); 363 ierr = DMInitializePackage();CHKERRQ(ierr); 364 ierr = PetscFEInitializePackage();CHKERRQ(ierr); 365 ierr = PetscFVInitializePackage();CHKERRQ(ierr); 366 PetscFunctionReturn(0); 367 } 368 369 #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */ 370