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