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