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