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