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