1 2 #include <petscao.h> 3 #include <petsc/private/dmlabelimpl.h> 4 #include <petsc/private/dmfieldimpl.h> 5 #include <petsc/private/dmpleximpl.h> 6 #include <petsc/private/petscdsimpl.h> 7 #include <petsc/private/petscfeimpl.h> 8 #include <petsc/private/petscfvimpl.h> 9 #include <petsc/private/dmswarmimpl.h> 10 11 static PetscBool DMPackageInitialized = PETSC_FALSE; 12 /*@C 13 DMFinalizePackage - This function finalizes everything in the DM package. It is called 14 from PetscFinalize(). 15 16 Level: developer 17 18 .seealso: PetscInitialize() 19 @*/ 20 PetscErrorCode DMFinalizePackage(void) 21 { 22 PetscErrorCode ierr; 23 24 PetscFunctionBegin; 25 ierr = PetscFunctionListDestroy(&DMList);CHKERRQ(ierr); 26 DMPackageInitialized = PETSC_FALSE; 27 DMRegisterAllCalled = PETSC_FALSE; 28 PetscFunctionReturn(0); 29 } 30 31 #if defined(PETSC_HAVE_HYPRE) 32 PETSC_EXTERN PetscErrorCode MatCreate_HYPREStruct(Mat); 33 PETSC_EXTERN PetscErrorCode MatCreate_HYPRESStruct(Mat); 34 #endif 35 36 /*@C 37 DMInitializePackage - This function initializes everything in the DM package. It is called 38 from PetscDLLibraryRegister_petscdm() when using dynamic libraries, and on the first call to AOCreate() 39 or DMDACreate() when using shared or static libraries. 40 41 Level: developer 42 43 .seealso: PetscInitialize() 44 @*/ 45 PetscErrorCode DMInitializePackage(void) 46 { 47 char logList[256]; 48 PetscBool opt,pkg; 49 PetscErrorCode ierr; 50 51 PetscFunctionBegin; 52 if (DMPackageInitialized) PetscFunctionReturn(0); 53 DMPackageInitialized = PETSC_TRUE; 54 55 /* Register Classes */ 56 ierr = PetscClassIdRegister("Distributed Mesh",&DM_CLASSID);CHKERRQ(ierr); 57 ierr = PetscClassIdRegister("DM Label",&DMLABEL_CLASSID);CHKERRQ(ierr); 58 ierr = PetscClassIdRegister("Quadrature",&PETSCQUADRATURE_CLASSID);CHKERRQ(ierr); 59 60 #if defined(PETSC_HAVE_HYPRE) 61 ierr = MatRegister(MATHYPRESTRUCT, MatCreate_HYPREStruct);CHKERRQ(ierr); 62 ierr = MatRegister(MATHYPRESSTRUCT, MatCreate_HYPRESStruct);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 ierr = PetscLogEventRegister("DMCreateInject", DM_CLASSID,&DM_CreateInjection);CHKERRQ(ierr); 77 ierr = PetscLogEventRegister("DMCreateMat", DM_CLASSID,&DM_CreateMatrix);CHKERRQ(ierr); 78 ierr = PetscLogEventRegister("DMLoad", DM_CLASSID,&DM_Load);CHKERRQ(ierr); 79 ierr = PetscLogEventRegister("DMAdaptInterp", DM_CLASSID,&DM_AdaptInterpolator);CHKERRQ(ierr); 80 81 ierr = PetscLogEventRegister("DMPlexBuFrCeLi", DM_CLASSID,&DMPLEX_BuildFromCellList);CHKERRQ(ierr); 82 ierr = PetscLogEventRegister("DMPlexBuCoFrCeLi", DM_CLASSID,&DMPLEX_BuildCoordinatesFromCellList);CHKERRQ(ierr); 83 ierr = PetscLogEventRegister("DMPlexCreateGmsh", DM_CLASSID,&DMPLEX_CreateGmsh);CHKERRQ(ierr); 84 ierr = PetscLogEventRegister("DMPlexCrFromFile", DM_CLASSID,&DMPLEX_CreateFromFile);CHKERRQ(ierr); 85 ierr = PetscLogEventRegister("Mesh Partition", DM_CLASSID,&DMPLEX_Partition);CHKERRQ(ierr); 86 ierr = PetscLogEventRegister("Mesh Migration", DM_CLASSID,&DMPLEX_Migrate);CHKERRQ(ierr); 87 ierr = PetscLogEventRegister("DMPlexPartSelf", DM_CLASSID,&DMPLEX_PartSelf);CHKERRQ(ierr); 88 ierr = PetscLogEventRegister("DMPlexPartLblInv", DM_CLASSID,&DMPLEX_PartLabelInvert);CHKERRQ(ierr); 89 ierr = PetscLogEventRegister("DMPlexPartLblSF", DM_CLASSID,&DMPLEX_PartLabelCreateSF);CHKERRQ(ierr); 90 ierr = PetscLogEventRegister("DMPlexPartStrtSF", DM_CLASSID,&DMPLEX_PartStratSF);CHKERRQ(ierr); 91 ierr = PetscLogEventRegister("DMPlexPointSF", DM_CLASSID,&DMPLEX_CreatePointSF);CHKERRQ(ierr); 92 ierr = PetscLogEventRegister("DMPlexInterp", DM_CLASSID,&DMPLEX_Interpolate);CHKERRQ(ierr); 93 ierr = PetscLogEventRegister("DMPlexDistribute", DM_CLASSID,&DMPLEX_Distribute);CHKERRQ(ierr); 94 ierr = PetscLogEventRegister("DMPlexDistCones", DM_CLASSID,&DMPLEX_DistributeCones);CHKERRQ(ierr); 95 ierr = PetscLogEventRegister("DMPlexDistLabels", DM_CLASSID,&DMPLEX_DistributeLabels);CHKERRQ(ierr); 96 ierr = PetscLogEventRegister("DMPlexDistSF", DM_CLASSID,&DMPLEX_DistributeSF);CHKERRQ(ierr); 97 ierr = PetscLogEventRegister("DMPlexDistOvrlp", DM_CLASSID,&DMPLEX_DistributeOverlap);CHKERRQ(ierr); 98 ierr = PetscLogEventRegister("DMPlexDistField", DM_CLASSID,&DMPLEX_DistributeField);CHKERRQ(ierr); 99 ierr = PetscLogEventRegister("DMPlexDistData", DM_CLASSID,&DMPLEX_DistributeData);CHKERRQ(ierr); 100 ierr = PetscLogEventRegister("DMPlexInterpSF", DM_CLASSID,&DMPLEX_InterpolateSF);CHKERRQ(ierr); 101 ierr = PetscLogEventRegister("DMPlexGToNBegin", DM_CLASSID,&DMPLEX_GlobalToNaturalBegin);CHKERRQ(ierr); 102 ierr = PetscLogEventRegister("DMPlexGToNEnd", DM_CLASSID,&DMPLEX_GlobalToNaturalEnd);CHKERRQ(ierr); 103 ierr = PetscLogEventRegister("DMPlexNToGBegin", DM_CLASSID,&DMPLEX_NaturalToGlobalBegin);CHKERRQ(ierr); 104 ierr = PetscLogEventRegister("DMPlexNToGEnd", DM_CLASSID,&DMPLEX_NaturalToGlobalEnd);CHKERRQ(ierr); 105 ierr = PetscLogEventRegister("DMPlexStratify", DM_CLASSID,&DMPLEX_Stratify);CHKERRQ(ierr); 106 ierr = PetscLogEventRegister("DMPlexSymmetrize", DM_CLASSID,&DMPLEX_Symmetrize);CHKERRQ(ierr); 107 ierr = PetscLogEventRegister("DMPlexPrealloc", DM_CLASSID,&DMPLEX_Preallocate);CHKERRQ(ierr); 108 ierr = PetscLogEventRegister("DMPlexResidualFE", DM_CLASSID,&DMPLEX_ResidualFEM);CHKERRQ(ierr); 109 ierr = PetscLogEventRegister("DMPlexJacobianFE", DM_CLASSID,&DMPLEX_JacobianFEM);CHKERRQ(ierr); 110 ierr = PetscLogEventRegister("DMPlexInterpFE", DM_CLASSID,&DMPLEX_InterpolatorFEM);CHKERRQ(ierr); 111 ierr = PetscLogEventRegister("DMPlexInjectorFE", DM_CLASSID,&DMPLEX_InjectorFEM);CHKERRQ(ierr); 112 ierr = PetscLogEventRegister("DMPlexIntegralFEM", DM_CLASSID,&DMPLEX_IntegralFEM);CHKERRQ(ierr); 113 ierr = PetscLogEventRegister("DMPlexRebalance", DM_CLASSID,&DMPLEX_RebalanceSharedPoints);CHKERRQ(ierr); 114 ierr = PetscLogEventRegister("DMPlexLocatePoints", DM_CLASSID,&DMPLEX_LocatePoints);CHKERRQ(ierr); 115 116 ierr = PetscLogEventRegister("DMSwarmMigrate", DM_CLASSID,&DMSWARM_Migrate);CHKERRQ(ierr); 117 ierr = PetscLogEventRegister("DMSwarmDETSetup", DM_CLASSID,&DMSWARM_DataExchangerTopologySetup);CHKERRQ(ierr); 118 ierr = PetscLogEventRegister("DMSwarmDExBegin", DM_CLASSID,&DMSWARM_DataExchangerBegin);CHKERRQ(ierr); 119 ierr = PetscLogEventRegister("DMSwarmDExEnd", DM_CLASSID,&DMSWARM_DataExchangerEnd);CHKERRQ(ierr); 120 ierr = PetscLogEventRegister("DMSwarmDESendCnt", DM_CLASSID,&DMSWARM_DataExchangerSendCount);CHKERRQ(ierr); 121 ierr = PetscLogEventRegister("DMSwarmDEPack", DM_CLASSID,&DMSWARM_DataExchangerPack);CHKERRQ(ierr); 122 ierr = PetscLogEventRegister("DMSwarmAddPnts", DM_CLASSID,&DMSWARM_AddPoints);CHKERRQ(ierr); 123 ierr = PetscLogEventRegister("DMSwarmRmvPnts", DM_CLASSID,&DMSWARM_RemovePoints);CHKERRQ(ierr); 124 ierr = PetscLogEventRegister("DMSwarmSort", DM_CLASSID,&DMSWARM_Sort);CHKERRQ(ierr); 125 ierr = PetscLogEventRegister("DMSwarmSetSizes", DM_CLASSID,&DMSWARM_SetSizes);CHKERRQ(ierr); 126 /* Process Info */ 127 { 128 PetscClassId classids[1]; 129 130 classids[0] = DM_CLASSID; 131 ierr = PetscInfoProcessClass("dm", 1, classids);CHKERRQ(ierr); 132 } 133 134 /* Process summary exclusions */ 135 ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr); 136 if (opt) { 137 ierr = PetscStrInList("dm",logList,',',&pkg);CHKERRQ(ierr); 138 if (pkg) {ierr = PetscLogEventExcludeClass(DM_CLASSID);CHKERRQ(ierr);} 139 } 140 141 ierr = DMPlexGenerateRegisterAll();CHKERRQ(ierr); 142 ierr = PetscRegisterFinalize(DMPlexGenerateRegisterDestroy);CHKERRQ(ierr); 143 ierr = PetscRegisterFinalize(DMFinalizePackage);CHKERRQ(ierr); 144 PetscFunctionReturn(0); 145 } 146 #include <petscfe.h> 147 148 static PetscBool PetscFEPackageInitialized = PETSC_FALSE; 149 /*@C 150 PetscFEFinalizePackage - This function finalizes everything in the PetscFE package. It is called 151 from PetscFinalize(). 152 153 Level: developer 154 155 .seealso: PetscInitialize() 156 @*/ 157 PetscErrorCode PetscFEFinalizePackage(void) 158 { 159 PetscErrorCode ierr; 160 161 PetscFunctionBegin; 162 ierr = PetscFunctionListDestroy(&PetscSpaceList);CHKERRQ(ierr); 163 ierr = PetscFunctionListDestroy(&PetscDualSpaceList);CHKERRQ(ierr); 164 ierr = PetscFunctionListDestroy(&PetscFEList);CHKERRQ(ierr); 165 PetscFEPackageInitialized = PETSC_FALSE; 166 PetscSpaceRegisterAllCalled = PETSC_FALSE; 167 PetscDualSpaceRegisterAllCalled = PETSC_FALSE; 168 PetscFERegisterAllCalled = PETSC_FALSE; 169 PetscFunctionReturn(0); 170 } 171 172 /*@C 173 PetscFEInitializePackage - This function initializes everything in the FE package. It is called 174 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscSpaceCreate() 175 when using static libraries. 176 177 Level: developer 178 179 .seealso: PetscInitialize() 180 @*/ 181 PetscErrorCode PetscFEInitializePackage(void) 182 { 183 char logList[256]; 184 PetscBool opt,pkg; 185 PetscErrorCode ierr; 186 187 PetscFunctionBegin; 188 if (PetscFEPackageInitialized) PetscFunctionReturn(0); 189 PetscFEPackageInitialized = PETSC_TRUE; 190 191 /* Register Classes */ 192 ierr = PetscClassIdRegister("Linear Space", &PETSCSPACE_CLASSID);CHKERRQ(ierr); 193 ierr = PetscClassIdRegister("Dual Space", &PETSCDUALSPACE_CLASSID);CHKERRQ(ierr); 194 ierr = PetscClassIdRegister("FE Space", &PETSCFE_CLASSID);CHKERRQ(ierr); 195 /* Register Constructors */ 196 ierr = PetscSpaceRegisterAll();CHKERRQ(ierr); 197 ierr = PetscDualSpaceRegisterAll();CHKERRQ(ierr); 198 ierr = PetscFERegisterAll();CHKERRQ(ierr); 199 /* Register Events */ 200 ierr = PetscLogEventRegister("DualSpaceSetUp", PETSCDUALSPACE_CLASSID, &PETSCDUALSPACE_SetUp);CHKERRQ(ierr); 201 ierr = PetscLogEventRegister("FESetUp", PETSCFE_CLASSID, &PETSCFE_SetUp);CHKERRQ(ierr); 202 /* Process Info */ 203 { 204 PetscClassId classids[3]; 205 206 classids[0] = PETSCFE_CLASSID; 207 classids[1] = PETSCSPACE_CLASSID; 208 classids[2] = PETSCDUALSPACE_CLASSID; 209 ierr = PetscInfoProcessClass("fe", 1, classids);CHKERRQ(ierr); 210 ierr = PetscInfoProcessClass("space", 1, &classids[1]);CHKERRQ(ierr); 211 ierr = PetscInfoProcessClass("dualspace", 1, &classids[2]);CHKERRQ(ierr); 212 } 213 /* Process summary exclusions */ 214 ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr); 215 if (opt) { 216 ierr = PetscStrInList("fe",logList,',',&pkg);CHKERRQ(ierr); 217 if (pkg) {ierr = PetscLogEventExcludeClass(PETSCFE_CLASSID);CHKERRQ(ierr);} 218 } 219 /* Register package finalizer */ 220 ierr = PetscRegisterFinalize(PetscFEFinalizePackage);CHKERRQ(ierr); 221 PetscFunctionReturn(0); 222 } 223 #include <petscfv.h> 224 225 static PetscBool PetscFVPackageInitialized = PETSC_FALSE; 226 /*@C 227 PetscFVFinalizePackage - This function finalizes everything in the PetscFV package. It is called 228 from PetscFinalize(). 229 230 Level: developer 231 232 .seealso: PetscInitialize() 233 @*/ 234 PetscErrorCode PetscFVFinalizePackage(void) 235 { 236 PetscErrorCode ierr; 237 238 PetscFunctionBegin; 239 ierr = PetscFunctionListDestroy(&PetscLimiterList);CHKERRQ(ierr); 240 ierr = PetscFunctionListDestroy(&PetscFVList);CHKERRQ(ierr); 241 PetscFVPackageInitialized = PETSC_FALSE; 242 PetscFVRegisterAllCalled = PETSC_FALSE; 243 PetscLimiterRegisterAllCalled = PETSC_FALSE; 244 PetscFunctionReturn(0); 245 } 246 247 /*@C 248 PetscFVInitializePackage - This function initializes everything in the FV package. It is called 249 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscFVCreate() 250 when using static libraries. 251 252 Level: developer 253 254 .seealso: PetscInitialize() 255 @*/ 256 PetscErrorCode PetscFVInitializePackage(void) 257 { 258 char logList[256]; 259 PetscBool opt,pkg; 260 PetscErrorCode ierr; 261 262 PetscFunctionBegin; 263 if (PetscFVPackageInitialized) PetscFunctionReturn(0); 264 PetscFVPackageInitialized = PETSC_TRUE; 265 266 /* Register Classes */ 267 ierr = PetscClassIdRegister("FV Space", &PETSCFV_CLASSID);CHKERRQ(ierr); 268 ierr = PetscClassIdRegister("Limiter", &PETSCLIMITER_CLASSID);CHKERRQ(ierr); 269 /* Register Constructors */ 270 ierr = PetscFVRegisterAll();CHKERRQ(ierr); 271 /* Register Events */ 272 /* Process Info */ 273 { 274 PetscClassId classids[2]; 275 276 classids[0] = PETSCFV_CLASSID; 277 classids[1] = PETSCLIMITER_CLASSID; 278 ierr = PetscInfoProcessClass("fv", 1, classids);CHKERRQ(ierr); 279 ierr = PetscInfoProcessClass("limiter", 1, &classids[1]);CHKERRQ(ierr); 280 } 281 /* Process summary exclusions */ 282 ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr); 283 if (opt) { 284 ierr = PetscStrInList("fv",logList,',',&pkg);CHKERRQ(ierr); 285 if (pkg) {ierr = PetscLogEventExcludeClass(PETSCFV_CLASSID);CHKERRQ(ierr);} 286 ierr = PetscStrInList("limiter",logList,',',&pkg);CHKERRQ(ierr); 287 if (pkg) {ierr = PetscLogEventExcludeClass(PETSCLIMITER_CLASSID);CHKERRQ(ierr);} 288 } 289 /* Register package finalizer */ 290 ierr = PetscRegisterFinalize(PetscFVFinalizePackage);CHKERRQ(ierr); 291 PetscFunctionReturn(0); 292 } 293 #include <petscds.h> 294 295 static PetscBool PetscDSPackageInitialized = PETSC_FALSE; 296 /*@C 297 PetscDSFinalizePackage - This function finalizes everything in the PetscDS package. It is called 298 from PetscFinalize(). 299 300 Level: developer 301 302 .seealso: PetscInitialize() 303 @*/ 304 PetscErrorCode PetscDSFinalizePackage(void) 305 { 306 PetscErrorCode ierr; 307 308 PetscFunctionBegin; 309 ierr = PetscFunctionListDestroy(&PetscDSList);CHKERRQ(ierr); 310 PetscDSPackageInitialized = PETSC_FALSE; 311 PetscDSRegisterAllCalled = PETSC_FALSE; 312 PetscFunctionReturn(0); 313 } 314 315 /*@C 316 PetscDSInitializePackage - This function initializes everything in the DS package. It is called 317 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscDSCreate() 318 when using static libraries. 319 320 Level: developer 321 322 .seealso: PetscInitialize() 323 @*/ 324 PetscErrorCode PetscDSInitializePackage(void) 325 { 326 char logList[256]; 327 PetscBool opt,pkg; 328 PetscErrorCode ierr; 329 330 PetscFunctionBegin; 331 if (PetscDSPackageInitialized) PetscFunctionReturn(0); 332 PetscDSPackageInitialized = PETSC_TRUE; 333 334 /* Register Classes */ 335 ierr = PetscClassIdRegister("Discrete System", &PETSCDS_CLASSID);CHKERRQ(ierr); 336 ierr = PetscClassIdRegister("Weak Form", &PETSCWEAKFORM_CLASSID);CHKERRQ(ierr); 337 /* Register Constructors */ 338 ierr = PetscDSRegisterAll();CHKERRQ(ierr); 339 /* Register Events */ 340 /* Process Info */ 341 { 342 PetscClassId classids[1]; 343 344 classids[0] = PETSCDS_CLASSID; 345 ierr = PetscInfoProcessClass("ds", 1, classids);CHKERRQ(ierr); 346 } 347 /* Process summary exclusions */ 348 ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr); 349 if (opt) { 350 ierr = PetscStrInList("ds",logList,',',&pkg);CHKERRQ(ierr); 351 if (pkg) {ierr = PetscLogEventExcludeClass(PETSCDS_CLASSID);CHKERRQ(ierr);} 352 } 353 /* Register package finalizer */ 354 ierr = PetscRegisterFinalize(PetscDSFinalizePackage);CHKERRQ(ierr); 355 PetscFunctionReturn(0); 356 } 357 358 #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES) 359 /* 360 PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 361 362 This one registers all the mesh generators and partitioners that are in 363 the basic DM library. 364 365 */ 366 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void) 367 { 368 PetscErrorCode ierr; 369 370 PetscFunctionBegin; 371 ierr = AOInitializePackage();CHKERRQ(ierr); 372 ierr = PetscPartitionerInitializePackage();CHKERRQ(ierr); 373 ierr = DMInitializePackage();CHKERRQ(ierr); 374 ierr = PetscFEInitializePackage();CHKERRQ(ierr); 375 ierr = PetscFVInitializePackage();CHKERRQ(ierr); 376 ierr = DMFieldInitializePackage();CHKERRQ(ierr); 377 PetscFunctionReturn(0); 378 } 379 380 #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */ 381