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