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(&PetscFVList);CHKERRQ(ierr); 199 PetscFVPackageInitialized = PETSC_FALSE; 200 PetscFVRegisterAllCalled = PETSC_FALSE; 201 PetscFunctionReturn(0); 202 } 203 204 #undef __FUNCT__ 205 #define __FUNCT__ "PetscFVInitializePackage" 206 /*@C 207 PetscFVInitializePackage - This function initializes everything in the FV package. It is called 208 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscFVCreate() 209 when using static libraries. 210 211 Level: developer 212 213 .keywords: PetscFV, initialize, package 214 .seealso: PetscInitialize() 215 @*/ 216 PetscErrorCode PetscFVInitializePackage(void) 217 { 218 char logList[256]; 219 char *className; 220 PetscBool opt; 221 PetscErrorCode ierr; 222 223 PetscFunctionBegin; 224 if (PetscFVPackageInitialized) PetscFunctionReturn(0); 225 PetscFVPackageInitialized = PETSC_TRUE; 226 227 /* Register Classes */ 228 ierr = PetscClassIdRegister("FV Space", &PETSCFV_CLASSID);CHKERRQ(ierr); 229 230 /* Register Constructors */ 231 ierr = PetscFVRegisterAll();CHKERRQ(ierr); 232 /* Register Events */ 233 /* Process info exclusions */ 234 ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 235 if (opt) { 236 ierr = PetscStrstr(logList, "fv", &className);CHKERRQ(ierr); 237 if (className) {ierr = PetscInfoDeactivateClass(PETSCFV_CLASSID);CHKERRQ(ierr);} 238 } 239 /* Process summary exclusions */ 240 ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr); 241 if (opt) { 242 ierr = PetscStrstr(logList, "fv", &className);CHKERRQ(ierr); 243 if (className) {ierr = PetscLogEventDeactivateClass(PETSCFV_CLASSID);CHKERRQ(ierr);} 244 } 245 ierr = PetscRegisterFinalize(PetscFVFinalizePackage);CHKERRQ(ierr); 246 PetscFunctionReturn(0); 247 } 248 249 #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES) 250 #undef __FUNCT__ 251 #define __FUNCT__ "PetscDLLibraryRegister_petscdm" 252 /* 253 PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 254 255 This one registers all the mesh generators and partitioners that are in 256 the basic DM library. 257 258 */ 259 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void) 260 { 261 PetscErrorCode ierr; 262 263 PetscFunctionBegin; 264 ierr = AOInitializePackage();CHKERRQ(ierr); 265 ierr = DMInitializePackage();CHKERRQ(ierr); 266 ierr = PetscFEInitializePackage();CHKERRQ(ierr); 267 PetscFunctionReturn(0); 268 } 269 270 #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */ 271