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