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