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