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