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