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