1 2 #include <petsc-private/dmdaimpl.h> 3 #include <petsc-private/dmpleximpl.h> 4 5 static PetscBool DMPackageInitialized = PETSC_FALSE; 6 #undef __FUNCT__ 7 #define __FUNCT__ "DMFinalizePackage" 8 /*@C 9 DMFinalizePackage - This function finalizes everything in the DM package. It is called 10 from PetscFinalize(). 11 12 Level: developer 13 14 .keywords: AO, initialize, package 15 .seealso: PetscInitialize() 16 @*/ 17 PetscErrorCode DMFinalizePackage(void) 18 { 19 PetscErrorCode ierr; 20 21 PetscFunctionBegin; 22 ierr = PetscFunctionListDestroy(&DMList);CHKERRQ(ierr); 23 DMPackageInitialized = PETSC_FALSE; 24 DMRegisterAllCalled = PETSC_FALSE; 25 PetscFunctionReturn(0); 26 } 27 28 #if defined(PETSC_HAVE_HYPRE) 29 PETSC_EXTERN PetscErrorCode MatCreate_HYPREStruct(Mat); 30 #endif 31 32 #undef __FUNCT__ 33 #define __FUNCT__ "DMInitializePackage" 34 /*@C 35 DMInitializePackage - This function initializes everything in the DM package. It is called 36 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to AOCreate() 37 or DMDACreate() when using static libraries. 38 39 Level: developer 40 41 .keywords: AO, initialize, package 42 .seealso: PetscInitialize() 43 @*/ 44 PetscErrorCode DMInitializePackage(void) 45 { 46 char logList[256]; 47 char *className; 48 PetscBool opt; 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 58 #if defined(PETSC_HAVE_HYPRE) 59 ierr = MatRegister(MATHYPRESTRUCT, MatCreate_HYPREStruct);CHKERRQ(ierr); 60 #endif 61 62 /* Register Constructors */ 63 ierr = DMRegisterAll();CHKERRQ(ierr); 64 /* Register Events */ 65 ierr = PetscLogEventRegister("DMConvert", DM_CLASSID,&DM_Convert);CHKERRQ(ierr); 66 ierr = PetscLogEventRegister("DMGlobalToLocal", DM_CLASSID,&DM_GlobalToLocal);CHKERRQ(ierr); 67 ierr = PetscLogEventRegister("DMLocalToGlobal", DM_CLASSID,&DM_LocalToGlobal);CHKERRQ(ierr); 68 69 ierr = PetscLogEventRegister("DMDALocalADFunc", DM_CLASSID,&DMDA_LocalADFunction);CHKERRQ(ierr); 70 71 ierr = PetscLogEventRegister("DMPlexInterpolate", DM_CLASSID,&DMPLEX_Interpolate);CHKERRQ(ierr); 72 ierr = PetscLogEventRegister("DMPlexPartition", DM_CLASSID,&DMPLEX_Partition);CHKERRQ(ierr); 73 ierr = PetscLogEventRegister("DMPlexDistribute", DM_CLASSID,&DMPLEX_Distribute);CHKERRQ(ierr); 74 ierr = PetscLogEventRegister("DMPlexDistribCones", DM_CLASSID,&DMPLEX_DistributeCones);CHKERRQ(ierr); 75 ierr = PetscLogEventRegister("DMPlexDistribLabels", DM_CLASSID,&DMPLEX_DistributeLabels);CHKERRQ(ierr); 76 ierr = PetscLogEventRegister("DMPlexDistribSF", DM_CLASSID,&DMPLEX_DistributeSF);CHKERRQ(ierr); 77 ierr = PetscLogEventRegister("DMPlexDistribField", DM_CLASSID,&DMPLEX_DistributeField);CHKERRQ(ierr); 78 ierr = PetscLogEventRegister("DMPlexDistribData", DM_CLASSID,&DMPLEX_DistributeData);CHKERRQ(ierr); 79 ierr = PetscLogEventRegister("DMPlexStratify", DM_CLASSID,&DMPLEX_Stratify);CHKERRQ(ierr); 80 ierr = PetscLogEventRegister("DMPlexPreallocate", DM_CLASSID,&DMPLEX_Preallocate);CHKERRQ(ierr); 81 ierr = PetscLogEventRegister("DMPlexResidualFEM", DM_CLASSID,&DMPLEX_ResidualFEM);CHKERRQ(ierr); 82 ierr = PetscLogEventRegister("DMPlexJacobianFEM", DM_CLASSID,&DMPLEX_JacobianFEM);CHKERRQ(ierr); 83 /* Process info exclusions */ 84 ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 85 if (opt) { 86 ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr); 87 if (className) { 88 ierr = PetscInfoDeactivateClass(DM_CLASSID);CHKERRQ(ierr); 89 } 90 } 91 /* Process summary exclusions */ 92 ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr); 93 if (opt) { 94 ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr); 95 if (className) { 96 ierr = PetscLogEventDeactivateClass(DM_CLASSID);CHKERRQ(ierr); 97 } 98 } 99 ierr = PetscRegisterFinalize(DMFinalizePackage);CHKERRQ(ierr); 100 PetscFunctionReturn(0); 101 } 102 #include <petscfe.h> 103 104 static PetscBool PetscFEPackageInitialized = PETSC_FALSE; 105 #undef __FUNCT__ 106 #define __FUNCT__ "PetscFEFinalizePackage" 107 /*@C 108 PetscFEFinalizePackage - This function finalizes everything in the PetscFE package. It is called 109 from PetscFinalize(). 110 111 Level: developer 112 113 .keywords: PetscFE, initialize, package 114 .seealso: PetscInitialize() 115 @*/ 116 PetscErrorCode PetscFEFinalizePackage(void) 117 { 118 PetscErrorCode ierr; 119 120 PetscFunctionBegin; 121 ierr = PetscFunctionListDestroy(&PetscSpaceList);CHKERRQ(ierr); 122 ierr = PetscFunctionListDestroy(&PetscDualSpaceList);CHKERRQ(ierr); 123 ierr = PetscFunctionListDestroy(&PetscFEList);CHKERRQ(ierr); 124 PetscFEPackageInitialized = PETSC_FALSE; 125 PetscSpaceRegisterAllCalled = PETSC_FALSE; 126 PetscDualSpaceRegisterAllCalled = PETSC_FALSE; 127 PetscFERegisterAllCalled = PETSC_FALSE; 128 PetscFunctionReturn(0); 129 } 130 131 #undef __FUNCT__ 132 #define __FUNCT__ "PetscFEInitializePackage" 133 /*@C 134 PetscFEInitializePackage - This function initializes everything in the FE package. It is called 135 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscSpaceCreate() 136 when using static libraries. 137 138 Level: developer 139 140 .keywords: PetscFE, initialize, package 141 .seealso: PetscInitialize() 142 @*/ 143 PetscErrorCode PetscFEInitializePackage(void) 144 { 145 char logList[256]; 146 char *className; 147 PetscBool opt; 148 PetscErrorCode ierr; 149 150 PetscFunctionBegin; 151 if (PetscFEPackageInitialized) PetscFunctionReturn(0); 152 PetscFEPackageInitialized = PETSC_TRUE; 153 154 /* Register Classes */ 155 ierr = PetscClassIdRegister("Linear Space", &PETSCSPACE_CLASSID);CHKERRQ(ierr); 156 ierr = PetscClassIdRegister("Dual Space", &PETSCDUALSPACE_CLASSID);CHKERRQ(ierr); 157 ierr = PetscClassIdRegister("FE Space", &PETSCFE_CLASSID);CHKERRQ(ierr); 158 159 /* Register Constructors */ 160 ierr = PetscSpaceRegisterAll();CHKERRQ(ierr); 161 ierr = PetscDualSpaceRegisterAll();CHKERRQ(ierr); 162 ierr = PetscFERegisterAll();CHKERRQ(ierr); 163 /* Register Events */ 164 /* Process info exclusions */ 165 ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 166 if (opt) { 167 ierr = PetscStrstr(logList, "fe", &className);CHKERRQ(ierr); 168 if (className) {ierr = PetscInfoDeactivateClass(PETSCFE_CLASSID);CHKERRQ(ierr);} 169 } 170 /* Process summary exclusions */ 171 ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr); 172 if (opt) { 173 ierr = PetscStrstr(logList, "fe", &className);CHKERRQ(ierr); 174 if (className) {ierr = PetscLogEventDeactivateClass(PETSCFE_CLASSID);CHKERRQ(ierr);} 175 } 176 ierr = PetscRegisterFinalize(PetscFEFinalizePackage);CHKERRQ(ierr); 177 PetscFunctionReturn(0); 178 } 179 #include <petscfv.h> 180 181 static PetscBool PetscFVPackageInitialized = PETSC_FALSE; 182 #undef __FUNCT__ 183 #define __FUNCT__ "PetscFVFinalizePackage" 184 /*@C 185 PetscFVFinalizePackage - This function finalizes everything in the PetscFV package. It is called 186 from PetscFinalize(). 187 188 Level: developer 189 190 .keywords: PetscFV, initialize, package 191 .seealso: PetscInitialize() 192 @*/ 193 PetscErrorCode PetscFVFinalizePackage(void) 194 { 195 PetscErrorCode ierr; 196 197 PetscFunctionBegin; 198 ierr = PetscFunctionListDestroy(&PetscLimiterList);CHKERRQ(ierr); 199 ierr = PetscFunctionListDestroy(&PetscFVList);CHKERRQ(ierr); 200 PetscFVPackageInitialized = PETSC_FALSE; 201 PetscFVRegisterAllCalled = PETSC_FALSE; 202 PetscLimiterRegisterAllCalled = PETSC_FALSE; 203 PetscFunctionReturn(0); 204 } 205 206 #undef __FUNCT__ 207 #define __FUNCT__ "PetscFVInitializePackage" 208 /*@C 209 PetscFVInitializePackage - This function initializes everything in the FV package. It is called 210 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscFVCreate() 211 when using static libraries. 212 213 Level: developer 214 215 .keywords: PetscFV, initialize, package 216 .seealso: PetscInitialize() 217 @*/ 218 PetscErrorCode PetscFVInitializePackage(void) 219 { 220 char logList[256]; 221 char *className; 222 PetscBool opt; 223 PetscErrorCode ierr; 224 225 PetscFunctionBegin; 226 if (PetscFVPackageInitialized) PetscFunctionReturn(0); 227 PetscFVPackageInitialized = PETSC_TRUE; 228 229 /* Register Classes */ 230 ierr = PetscClassIdRegister("FV Space", &PETSCFV_CLASSID);CHKERRQ(ierr); 231 ierr = PetscClassIdRegister("Limiter", &PETSCLIMITER_CLASSID);CHKERRQ(ierr); 232 233 /* Register Constructors */ 234 ierr = PetscFVRegisterAll();CHKERRQ(ierr); 235 /* Register Events */ 236 /* Process info exclusions */ 237 ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 238 if (opt) { 239 ierr = PetscStrstr(logList, "fv", &className);CHKERRQ(ierr); 240 if (className) {ierr = PetscInfoDeactivateClass(PETSCFV_CLASSID);CHKERRQ(ierr);} 241 ierr = PetscStrstr(logList, "limiter", &className);CHKERRQ(ierr); 242 if (className) {ierr = PetscInfoDeactivateClass(PETSCLIMITER_CLASSID);CHKERRQ(ierr);} 243 } 244 /* Process summary exclusions */ 245 ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr); 246 if (opt) { 247 ierr = PetscStrstr(logList, "fv", &className);CHKERRQ(ierr); 248 if (className) {ierr = PetscLogEventDeactivateClass(PETSCFV_CLASSID);CHKERRQ(ierr);} 249 ierr = PetscStrstr(logList, "limiter", &className);CHKERRQ(ierr); 250 if (className) {ierr = PetscLogEventDeactivateClass(PETSCLIMITER_CLASSID);CHKERRQ(ierr);} 251 } 252 ierr = PetscRegisterFinalize(PetscFVFinalizePackage);CHKERRQ(ierr); 253 PetscFunctionReturn(0); 254 } 255 256 #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES) 257 #undef __FUNCT__ 258 #define __FUNCT__ "PetscDLLibraryRegister_petscdm" 259 /* 260 PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 261 262 This one registers all the mesh generators and partitioners that are in 263 the basic DM library. 264 265 */ 266 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void) 267 { 268 PetscErrorCode ierr; 269 270 PetscFunctionBegin; 271 ierr = AOInitializePackage();CHKERRQ(ierr); 272 ierr = DMInitializePackage();CHKERRQ(ierr); 273 ierr = PetscFEInitializePackage();CHKERRQ(ierr); 274 ierr = PetscFVInitializePackage();CHKERRQ(ierr); 275 PetscFunctionReturn(0); 276 } 277 278 #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */ 279