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