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