1 2 #include <petsc/private/dmlabelimpl.h> 3 #include <petsc/private/dmdaimpl.h> 4 #include <petsc/private/dmpleximpl.h> 5 #include <petsc/private/petscdsimpl.h> 6 #include <petsc/private/petscfeimpl.h> 7 #include <petsc/private/petscfvimpl.h> 8 9 static PetscBool DMPackageInitialized = PETSC_FALSE; 10 /*@C 11 DMFinalizePackage - This function finalizes everything in the DM package. It is called 12 from PetscFinalize(). 13 14 Level: developer 15 16 .keywords: AO, initialize, package 17 .seealso: PetscInitialize() 18 @*/ 19 PetscErrorCode DMFinalizePackage(void) 20 { 21 PetscErrorCode ierr; 22 23 PetscFunctionBegin; 24 ierr = PetscFunctionListDestroy(&PetscPartitionerList);CHKERRQ(ierr); 25 ierr = PetscFunctionListDestroy(&DMList);CHKERRQ(ierr); 26 DMPackageInitialized = PETSC_FALSE; 27 DMRegisterAllCalled = PETSC_FALSE; 28 PetscPartitionerRegisterAllCalled = PETSC_FALSE; 29 PetscFunctionReturn(0); 30 } 31 32 #if defined(PETSC_HAVE_HYPRE) 33 PETSC_EXTERN PetscErrorCode MatCreate_HYPREStruct(Mat); 34 #endif 35 36 /*@C 37 DMInitializePackage - This function initializes everything in the DM package. It is called 38 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to AOCreate() 39 or DMDACreate() when using static libraries. 40 41 Level: developer 42 43 .keywords: AO, initialize, package 44 .seealso: PetscInitialize() 45 @*/ 46 PetscErrorCode DMInitializePackage(void) 47 { 48 char logList[256]; 49 char *className; 50 PetscBool opt; 51 PetscErrorCode ierr; 52 53 PetscFunctionBegin; 54 if (DMPackageInitialized) PetscFunctionReturn(0); 55 DMPackageInitialized = PETSC_TRUE; 56 57 /* Register Classes */ 58 ierr = PetscClassIdRegister("Distributed Mesh",&DM_CLASSID);CHKERRQ(ierr); 59 ierr = PetscClassIdRegister("GraphPartitioner",&PETSCPARTITIONER_CLASSID);CHKERRQ(ierr); 60 61 #if defined(PETSC_HAVE_HYPRE) 62 ierr = MatRegister(MATHYPRESTRUCT, MatCreate_HYPREStruct);CHKERRQ(ierr); 63 #endif 64 ierr = PetscSectionSymRegister(PETSCSECTIONSYMLABEL,PetscSectionSymCreate_Label);CHKERRQ(ierr); 65 66 /* Register Constructors */ 67 ierr = DMRegisterAll();CHKERRQ(ierr); 68 /* Register Events */ 69 ierr = PetscLogEventRegister("DMConvert", DM_CLASSID,&DM_Convert);CHKERRQ(ierr); 70 ierr = PetscLogEventRegister("DMGlobalToLocal", DM_CLASSID,&DM_GlobalToLocal);CHKERRQ(ierr); 71 ierr = PetscLogEventRegister("DMLocalToGlobal", DM_CLASSID,&DM_LocalToGlobal);CHKERRQ(ierr); 72 ierr = PetscLogEventRegister("DMLocatePoints", DM_CLASSID,&DM_LocatePoints);CHKERRQ(ierr); 73 ierr = PetscLogEventRegister("DMCoarsen", DM_CLASSID,&DM_Coarsen);CHKERRQ(ierr); 74 ierr = PetscLogEventRegister("DMCreateInterp", DM_CLASSID,&DM_CreateInterpolation);CHKERRQ(ierr); 75 ierr = PetscLogEventRegister("DMCreateRestrict", DM_CLASSID,&DM_CreateRestriction);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("DMPlexInterpSF", DM_CLASSID,&DMPLEX_InterpolateSF);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_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 /*@C 125 PetscFEFinalizePackage - This function finalizes everything in the PetscFE package. It is called 126 from PetscFinalize(). 127 128 Level: developer 129 130 .keywords: PetscFE, initialize, package 131 .seealso: PetscInitialize() 132 @*/ 133 PetscErrorCode PetscFEFinalizePackage(void) 134 { 135 PetscErrorCode ierr; 136 137 PetscFunctionBegin; 138 ierr = PetscFunctionListDestroy(&PetscSpaceList);CHKERRQ(ierr); 139 ierr = PetscFunctionListDestroy(&PetscDualSpaceList);CHKERRQ(ierr); 140 ierr = PetscFunctionListDestroy(&PetscFEList);CHKERRQ(ierr); 141 PetscFEPackageInitialized = PETSC_FALSE; 142 PetscSpaceRegisterAllCalled = PETSC_FALSE; 143 PetscDualSpaceRegisterAllCalled = PETSC_FALSE; 144 PetscFERegisterAllCalled = PETSC_FALSE; 145 PetscFunctionReturn(0); 146 } 147 148 /*@C 149 PetscFEInitializePackage - This function initializes everything in the FE package. It is called 150 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscSpaceCreate() 151 when using static libraries. 152 153 Level: developer 154 155 .keywords: PetscFE, initialize, package 156 .seealso: PetscInitialize() 157 @*/ 158 PetscErrorCode PetscFEInitializePackage(void) 159 { 160 char logList[256]; 161 char *className; 162 PetscBool opt; 163 PetscErrorCode ierr; 164 165 PetscFunctionBegin; 166 if (PetscFEPackageInitialized) PetscFunctionReturn(0); 167 PetscFEPackageInitialized = PETSC_TRUE; 168 169 /* Register Classes */ 170 ierr = PetscClassIdRegister("Linear Space", &PETSCSPACE_CLASSID);CHKERRQ(ierr); 171 ierr = PetscClassIdRegister("Dual Space", &PETSCDUALSPACE_CLASSID);CHKERRQ(ierr); 172 ierr = PetscClassIdRegister("FE Space", &PETSCFE_CLASSID);CHKERRQ(ierr); 173 174 /* Register Constructors */ 175 ierr = PetscSpaceRegisterAll();CHKERRQ(ierr); 176 ierr = PetscDualSpaceRegisterAll();CHKERRQ(ierr); 177 ierr = PetscFERegisterAll();CHKERRQ(ierr); 178 /* Register Events */ 179 /* Process info exclusions */ 180 ierr = PetscOptionsGetString(NULL,NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 181 if (opt) { 182 ierr = PetscStrstr(logList, "fe", &className);CHKERRQ(ierr); 183 if (className) {ierr = PetscInfoDeactivateClass(PETSCFE_CLASSID);CHKERRQ(ierr);} 184 } 185 /* Process summary exclusions */ 186 ierr = PetscOptionsGetString(NULL,NULL, "-log_exclude", logList, 256, &opt);CHKERRQ(ierr); 187 if (opt) { 188 ierr = PetscStrstr(logList, "fe", &className);CHKERRQ(ierr); 189 if (className) {ierr = PetscLogEventDeactivateClass(PETSCFE_CLASSID);CHKERRQ(ierr);} 190 } 191 ierr = PetscRegisterFinalize(PetscFEFinalizePackage);CHKERRQ(ierr); 192 PetscFunctionReturn(0); 193 } 194 #include <petscfv.h> 195 196 static PetscBool PetscFVPackageInitialized = PETSC_FALSE; 197 /*@C 198 PetscFVFinalizePackage - This function finalizes everything in the PetscFV package. It is called 199 from PetscFinalize(). 200 201 Level: developer 202 203 .keywords: PetscFV, initialize, package 204 .seealso: PetscInitialize() 205 @*/ 206 PetscErrorCode PetscFVFinalizePackage(void) 207 { 208 PetscErrorCode ierr; 209 210 PetscFunctionBegin; 211 ierr = PetscFunctionListDestroy(&PetscLimiterList);CHKERRQ(ierr); 212 ierr = PetscFunctionListDestroy(&PetscFVList);CHKERRQ(ierr); 213 PetscFVPackageInitialized = PETSC_FALSE; 214 PetscFVRegisterAllCalled = PETSC_FALSE; 215 PetscLimiterRegisterAllCalled = PETSC_FALSE; 216 PetscFunctionReturn(0); 217 } 218 219 /*@C 220 PetscFVInitializePackage - This function initializes everything in the FV package. It is called 221 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscFVCreate() 222 when using static libraries. 223 224 Level: developer 225 226 .keywords: PetscFV, initialize, package 227 .seealso: PetscInitialize() 228 @*/ 229 PetscErrorCode PetscFVInitializePackage(void) 230 { 231 char logList[256]; 232 char *className; 233 PetscBool opt; 234 PetscErrorCode ierr; 235 236 PetscFunctionBegin; 237 if (PetscFVPackageInitialized) PetscFunctionReturn(0); 238 PetscFVPackageInitialized = PETSC_TRUE; 239 240 /* Register Classes */ 241 ierr = PetscClassIdRegister("FV Space", &PETSCFV_CLASSID);CHKERRQ(ierr); 242 ierr = PetscClassIdRegister("Limiter", &PETSCLIMITER_CLASSID);CHKERRQ(ierr); 243 244 /* Register Constructors */ 245 ierr = PetscFVRegisterAll();CHKERRQ(ierr); 246 /* Register Events */ 247 /* Process info exclusions */ 248 ierr = PetscOptionsGetString(NULL,NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 249 if (opt) { 250 ierr = PetscStrstr(logList, "fv", &className);CHKERRQ(ierr); 251 if (className) {ierr = PetscInfoDeactivateClass(PETSCFV_CLASSID);CHKERRQ(ierr);} 252 ierr = PetscStrstr(logList, "limiter", &className);CHKERRQ(ierr); 253 if (className) {ierr = PetscInfoDeactivateClass(PETSCLIMITER_CLASSID);CHKERRQ(ierr);} 254 } 255 /* Process summary exclusions */ 256 ierr = PetscOptionsGetString(NULL,NULL, "-log_exclude", logList, 256, &opt);CHKERRQ(ierr); 257 if (opt) { 258 ierr = PetscStrstr(logList, "fv", &className);CHKERRQ(ierr); 259 if (className) {ierr = PetscLogEventDeactivateClass(PETSCFV_CLASSID);CHKERRQ(ierr);} 260 ierr = PetscStrstr(logList, "limiter", &className);CHKERRQ(ierr); 261 if (className) {ierr = PetscLogEventDeactivateClass(PETSCLIMITER_CLASSID);CHKERRQ(ierr);} 262 } 263 ierr = PetscRegisterFinalize(PetscFVFinalizePackage);CHKERRQ(ierr); 264 PetscFunctionReturn(0); 265 } 266 #include <petscds.h> 267 268 static PetscBool PetscDSPackageInitialized = PETSC_FALSE; 269 /*@C 270 PetscDSFinalizePackage - This function finalizes everything in the PetscDS package. It is called 271 from PetscFinalize(). 272 273 Level: developer 274 275 .keywords: PetscDS, initialize, package 276 .seealso: PetscInitialize() 277 @*/ 278 PetscErrorCode PetscDSFinalizePackage(void) 279 { 280 PetscErrorCode ierr; 281 282 PetscFunctionBegin; 283 ierr = PetscFunctionListDestroy(&PetscDSList);CHKERRQ(ierr); 284 PetscDSPackageInitialized = PETSC_FALSE; 285 PetscDSRegisterAllCalled = PETSC_FALSE; 286 PetscFunctionReturn(0); 287 } 288 289 /*@C 290 PetscDSInitializePackage - This function initializes everything in the DS package. It is called 291 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscDSCreate() 292 when using static libraries. 293 294 Level: developer 295 296 .keywords: PetscDS, initialize, package 297 .seealso: PetscInitialize() 298 @*/ 299 PetscErrorCode PetscDSInitializePackage(void) 300 { 301 char logList[256]; 302 char *className; 303 PetscBool opt; 304 PetscErrorCode ierr; 305 306 PetscFunctionBegin; 307 if (PetscDSPackageInitialized) PetscFunctionReturn(0); 308 PetscDSPackageInitialized = PETSC_TRUE; 309 310 /* Register Classes */ 311 ierr = PetscClassIdRegister("Discrete System", &PETSCDS_CLASSID);CHKERRQ(ierr); 312 313 /* Register Constructors */ 314 ierr = PetscDSRegisterAll();CHKERRQ(ierr); 315 /* Register Events */ 316 /* Process info exclusions */ 317 ierr = PetscOptionsGetString(NULL,NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 318 if (opt) { 319 ierr = PetscStrstr(logList, "ds", &className);CHKERRQ(ierr); 320 if (className) {ierr = PetscInfoDeactivateClass(PETSCDS_CLASSID);CHKERRQ(ierr);} 321 } 322 /* Process summary exclusions */ 323 ierr = PetscOptionsGetString(NULL,NULL, "-log_exclude", logList, 256, &opt);CHKERRQ(ierr); 324 if (opt) { 325 ierr = PetscStrstr(logList, "ds", &className);CHKERRQ(ierr); 326 if (className) {ierr = PetscLogEventDeactivateClass(PETSCDS_CLASSID);CHKERRQ(ierr);} 327 } 328 ierr = PetscRegisterFinalize(PetscDSFinalizePackage);CHKERRQ(ierr); 329 PetscFunctionReturn(0); 330 } 331 332 #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES) 333 /* 334 PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 335 336 This one registers all the mesh generators and partitioners that are in 337 the basic DM library. 338 339 */ 340 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void) 341 { 342 PetscErrorCode ierr; 343 344 PetscFunctionBegin; 345 ierr = AOInitializePackage();CHKERRQ(ierr); 346 ierr = DMInitializePackage();CHKERRQ(ierr); 347 ierr = PetscFEInitializePackage();CHKERRQ(ierr); 348 ierr = PetscFVInitializePackage();CHKERRQ(ierr); 349 PetscFunctionReturn(0); 350 } 351 352 #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */ 353