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