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