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