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 ierr = PetscLogEventRegister("DualSpaceSetUp", PETSCDUALSPACE_CLASSID, &PETSCDUALSPACE_SetUp);CHKERRQ(ierr); 202 ierr = PetscLogEventRegister("FESetUp", PETSCFE_CLASSID, &PETSCFE_SetUp);CHKERRQ(ierr); 203 /* Process Info */ 204 { 205 PetscClassId classids[3]; 206 207 classids[0] = PETSCFE_CLASSID; 208 classids[1] = PETSCSPACE_CLASSID; 209 classids[2] = PETSCDUALSPACE_CLASSID; 210 ierr = PetscInfoProcessClass("fe", 1, classids);CHKERRQ(ierr); 211 ierr = PetscInfoProcessClass("space", 1, &classids[1]);CHKERRQ(ierr); 212 ierr = PetscInfoProcessClass("dualspace", 1, &classids[2]);CHKERRQ(ierr); 213 } 214 /* Process summary exclusions */ 215 ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr); 216 if (opt) { 217 ierr = PetscStrInList("fe",logList,',',&pkg);CHKERRQ(ierr); 218 if (pkg) {ierr = PetscLogEventExcludeClass(PETSCFE_CLASSID);CHKERRQ(ierr);} 219 } 220 /* Register package finalizer */ 221 ierr = PetscRegisterFinalize(PetscFEFinalizePackage);CHKERRQ(ierr); 222 PetscFunctionReturn(0); 223 } 224 #include <petscfv.h> 225 226 static PetscBool PetscFVPackageInitialized = PETSC_FALSE; 227 /*@C 228 PetscFVFinalizePackage - This function finalizes everything in the PetscFV package. It is called 229 from PetscFinalize(). 230 231 Level: developer 232 233 .seealso: PetscInitialize() 234 @*/ 235 PetscErrorCode PetscFVFinalizePackage(void) 236 { 237 PetscErrorCode ierr; 238 239 PetscFunctionBegin; 240 ierr = PetscFunctionListDestroy(&PetscLimiterList);CHKERRQ(ierr); 241 ierr = PetscFunctionListDestroy(&PetscFVList);CHKERRQ(ierr); 242 PetscFVPackageInitialized = PETSC_FALSE; 243 PetscFVRegisterAllCalled = PETSC_FALSE; 244 PetscLimiterRegisterAllCalled = PETSC_FALSE; 245 PetscFunctionReturn(0); 246 } 247 248 /*@C 249 PetscFVInitializePackage - This function initializes everything in the FV package. It is called 250 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscFVCreate() 251 when using static libraries. 252 253 Level: developer 254 255 .seealso: PetscInitialize() 256 @*/ 257 PetscErrorCode PetscFVInitializePackage(void) 258 { 259 char logList[256]; 260 PetscBool opt,pkg; 261 PetscErrorCode ierr; 262 263 PetscFunctionBegin; 264 if (PetscFVPackageInitialized) PetscFunctionReturn(0); 265 PetscFVPackageInitialized = PETSC_TRUE; 266 267 /* Register Classes */ 268 ierr = PetscClassIdRegister("FV Space", &PETSCFV_CLASSID);CHKERRQ(ierr); 269 ierr = PetscClassIdRegister("Limiter", &PETSCLIMITER_CLASSID);CHKERRQ(ierr); 270 /* Register Constructors */ 271 ierr = PetscFVRegisterAll();CHKERRQ(ierr); 272 /* Register Events */ 273 /* Process Info */ 274 { 275 PetscClassId classids[2]; 276 277 classids[0] = PETSCFV_CLASSID; 278 classids[1] = PETSCLIMITER_CLASSID; 279 ierr = PetscInfoProcessClass("fv", 1, classids);CHKERRQ(ierr); 280 ierr = PetscInfoProcessClass("limiter", 1, &classids[1]);CHKERRQ(ierr); 281 } 282 /* Process summary exclusions */ 283 ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr); 284 if (opt) { 285 ierr = PetscStrInList("fv",logList,',',&pkg);CHKERRQ(ierr); 286 if (pkg) {ierr = PetscLogEventExcludeClass(PETSCFV_CLASSID);CHKERRQ(ierr);} 287 ierr = PetscStrInList("limiter",logList,',',&pkg);CHKERRQ(ierr); 288 if (pkg) {ierr = PetscLogEventExcludeClass(PETSCLIMITER_CLASSID);CHKERRQ(ierr);} 289 } 290 /* Register package finalizer */ 291 ierr = PetscRegisterFinalize(PetscFVFinalizePackage);CHKERRQ(ierr); 292 PetscFunctionReturn(0); 293 } 294 #include <petscds.h> 295 296 static PetscBool PetscDSPackageInitialized = PETSC_FALSE; 297 /*@C 298 PetscDSFinalizePackage - This function finalizes everything in the PetscDS package. It is called 299 from PetscFinalize(). 300 301 Level: developer 302 303 .seealso: PetscInitialize() 304 @*/ 305 PetscErrorCode PetscDSFinalizePackage(void) 306 { 307 PetscErrorCode ierr; 308 309 PetscFunctionBegin; 310 ierr = PetscFunctionListDestroy(&PetscDSList);CHKERRQ(ierr); 311 PetscDSPackageInitialized = PETSC_FALSE; 312 PetscDSRegisterAllCalled = PETSC_FALSE; 313 PetscFunctionReturn(0); 314 } 315 316 /*@C 317 PetscDSInitializePackage - This function initializes everything in the DS package. It is called 318 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscDSCreate() 319 when using static libraries. 320 321 Level: developer 322 323 .seealso: PetscInitialize() 324 @*/ 325 PetscErrorCode PetscDSInitializePackage(void) 326 { 327 char logList[256]; 328 PetscBool opt,pkg; 329 PetscErrorCode ierr; 330 331 PetscFunctionBegin; 332 if (PetscDSPackageInitialized) PetscFunctionReturn(0); 333 PetscDSPackageInitialized = PETSC_TRUE; 334 335 /* Register Classes */ 336 ierr = PetscClassIdRegister("Discrete System", &PETSCDS_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 = DMInitializePackage();CHKERRQ(ierr); 373 ierr = PetscFEInitializePackage();CHKERRQ(ierr); 374 ierr = PetscFVInitializePackage();CHKERRQ(ierr); 375 ierr = DMFieldInitializePackage();CHKERRQ(ierr); 376 PetscFunctionReturn(0); 377 } 378 379 #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */ 380