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