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