1 2 #include <petsc-private/dmdaimpl.h> 3 #include <petsc-private/dmpleximpl.h> 4 #if defined(PETSC_HAVE_SIEVE) 5 #include <petsc-private/meshimpl.h> 6 #endif 7 8 static PetscBool DMPackageInitialized = PETSC_FALSE; 9 #undef __FUNCT__ 10 #define __FUNCT__ "DMFinalizePackage" 11 /*@C 12 DMFinalizePackage - This function finalizes everything in the DM package. It is called 13 from PetscFinalize(). 14 15 Level: developer 16 17 .keywords: AO, initialize, package 18 .seealso: PetscInitialize() 19 @*/ 20 PetscErrorCode DMFinalizePackage(void) 21 { 22 PetscErrorCode ierr; 23 24 PetscFunctionBegin; 25 ierr = PetscFunctionListDestroy(&DMList);CHKERRQ(ierr); 26 DMPackageInitialized = PETSC_FALSE; 27 DMRegisterAllCalled = PETSC_FALSE; 28 #if defined(PETSC_HAVE_SIEVE) 29 ierr = DMMeshFinalize();CHKERRQ(ierr); 30 #endif 31 PetscFunctionReturn(0); 32 } 33 34 #if defined(PETSC_HAVE_HYPRE) 35 PETSC_EXTERN PetscErrorCode MatCreate_HYPREStruct(Mat); 36 #endif 37 38 #undef __FUNCT__ 39 #define __FUNCT__ "DMInitializePackage" 40 /*@C 41 DMInitializePackage - This function initializes everything in the DM package. It is called 42 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to AOCreate() 43 or DMDACreate() when using static libraries. 44 45 Level: developer 46 47 .keywords: AO, initialize, package 48 .seealso: PetscInitialize() 49 @*/ 50 PetscErrorCode DMInitializePackage(void) 51 { 52 char logList[256]; 53 char *className; 54 PetscBool opt; 55 PetscErrorCode ierr; 56 57 PetscFunctionBegin; 58 if (DMPackageInitialized) PetscFunctionReturn(0); 59 DMPackageInitialized = PETSC_TRUE; 60 61 /* Register Classes */ 62 ierr = PetscClassIdRegister("Distributed Mesh",&DM_CLASSID);CHKERRQ(ierr); 63 #if defined(PETSC_HAVE_SIEVE) 64 ierr = PetscClassIdRegister("SectionReal",&SECTIONREAL_CLASSID);CHKERRQ(ierr); 65 ierr = PetscClassIdRegister("SectionInt",&SECTIONINT_CLASSID);CHKERRQ(ierr); 66 #endif 67 68 #if defined(PETSC_HAVE_HYPRE) 69 ierr = MatRegister(MATHYPRESTRUCT, MatCreate_HYPREStruct);CHKERRQ(ierr); 70 #endif 71 72 /* Register Constructors */ 73 ierr = DMRegisterAll();CHKERRQ(ierr); 74 /* Register Events */ 75 ierr = PetscLogEventRegister("DMConvert", DM_CLASSID,&DM_Convert);CHKERRQ(ierr); 76 ierr = PetscLogEventRegister("DMGlobalToLocal", DM_CLASSID,&DM_GlobalToLocal);CHKERRQ(ierr); 77 ierr = PetscLogEventRegister("DMLocalToGlobal", DM_CLASSID,&DM_LocalToGlobal);CHKERRQ(ierr); 78 79 ierr = PetscLogEventRegister("DMDALocalADFunc", DM_CLASSID,&DMDA_LocalADFunction);CHKERRQ(ierr); 80 81 ierr = PetscLogEventRegister("DMPlexDistribute", DM_CLASSID,&DMPLEX_Distribute);CHKERRQ(ierr); 82 ierr = PetscLogEventRegister("DMPlexStratify", DM_CLASSID,&DMPLEX_Stratify);CHKERRQ(ierr); 83 ierr = PetscLogEventRegister("DMPlexResidualFEM", DM_CLASSID,&DMPLEX_ResidualFEM);CHKERRQ(ierr); 84 ierr = PetscLogEventRegister("DMPlexJacobianFEM", DM_CLASSID,&DMPLEX_JacobianFEM);CHKERRQ(ierr); 85 #if defined(PETSC_HAVE_SIEVE) 86 ierr = PetscLogEventRegister("DMMeshView", DM_CLASSID,&DMMesh_View);CHKERRQ(ierr); 87 ierr = PetscLogEventRegister("DMMeshGetGlobalScatter", DM_CLASSID,&DMMesh_GetGlobalScatter);CHKERRQ(ierr); 88 ierr = PetscLogEventRegister("DMMeshRestrictVector", DM_CLASSID,&DMMesh_restrictVector);CHKERRQ(ierr); 89 ierr = PetscLogEventRegister("DMMeshAssembleVector", DM_CLASSID,&DMMesh_assembleVector);CHKERRQ(ierr); 90 ierr = PetscLogEventRegister("DMMeshAssemVecComplete", DM_CLASSID,&DMMesh_assembleVectorComplete);CHKERRQ(ierr); 91 ierr = PetscLogEventRegister("DMMeshAssembleMatrix", DM_CLASSID,&DMMesh_assembleMatrix);CHKERRQ(ierr); 92 ierr = PetscLogEventRegister("DMMeshUpdateOperator", DM_CLASSID,&DMMesh_updateOperator);CHKERRQ(ierr); 93 ierr = PetscLogEventRegister("SectionRealView", SECTIONREAL_CLASSID,&SectionReal_View);CHKERRQ(ierr); 94 ierr = PetscLogEventRegister("SectionIntView", SECTIONINT_CLASSID,&SectionInt_View);CHKERRQ(ierr); 95 #endif 96 /* Process info exclusions */ 97 ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 98 if (opt) { 99 ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr); 100 if (className) { 101 ierr = PetscInfoDeactivateClass(DM_CLASSID);CHKERRQ(ierr); 102 } 103 #if defined(PETSC_HAVE_SIEVE) 104 ierr = PetscStrstr(logList, "sectionreal", &className);CHKERRQ(ierr); 105 if (className) { 106 ierr = PetscInfoDeactivateClass(SECTIONREAL_CLASSID);CHKERRQ(ierr); 107 } 108 ierr = PetscStrstr(logList, "sectionint", &className);CHKERRQ(ierr); 109 if (className) { 110 ierr = PetscInfoDeactivateClass(SECTIONINT_CLASSID);CHKERRQ(ierr); 111 } 112 #endif 113 } 114 /* Process summary exclusions */ 115 ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr); 116 if (opt) { 117 ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr); 118 if (className) { 119 ierr = PetscLogEventDeactivateClass(DM_CLASSID);CHKERRQ(ierr); 120 } 121 #if defined(PETSC_HAVE_SIEVE) 122 ierr = PetscStrstr(logList, "sectionreal", &className);CHKERRQ(ierr); 123 if (className) { 124 ierr = PetscLogEventDeactivateClass(SECTIONREAL_CLASSID);CHKERRQ(ierr); 125 } 126 ierr = PetscStrstr(logList, "sectionint", &className);CHKERRQ(ierr); 127 if (className) { 128 ierr = PetscLogEventDeactivateClass(SECTIONINT_CLASSID);CHKERRQ(ierr); 129 } 130 #endif 131 } 132 ierr = PetscRegisterFinalize(DMFinalizePackage);CHKERRQ(ierr); 133 PetscFunctionReturn(0); 134 } 135 #include <petscfe.h> 136 137 static PetscBool PetscFEPackageInitialized = PETSC_FALSE; 138 #undef __FUNCT__ 139 #define __FUNCT__ "PetscFEFinalizePackage" 140 /*@C 141 PetscFEFinalizePackage - This function finalizes everything in the PetscFE package. It is called 142 from PetscFinalize(). 143 144 Level: developer 145 146 .keywords: PetscFE, initialize, package 147 .seealso: PetscInitialize() 148 @*/ 149 PetscErrorCode PetscFEFinalizePackage(void) 150 { 151 PetscErrorCode ierr; 152 153 PetscFunctionBegin; 154 ierr = PetscFunctionListDestroy(&PetscSpaceList);CHKERRQ(ierr); 155 ierr = PetscFunctionListDestroy(&PetscDualSpaceList);CHKERRQ(ierr); 156 PetscFEPackageInitialized = PETSC_FALSE; 157 PetscSpaceRegisterAllCalled = PETSC_FALSE; 158 PetscDualSpaceRegisterAllCalled = PETSC_FALSE; 159 PetscFunctionReturn(0); 160 } 161 162 #undef __FUNCT__ 163 #define __FUNCT__ "PetscFEInitializePackage" 164 /*@C 165 PetscFEInitializePackage - This function initializes everything in the FE package. It is called 166 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscSpaceCreate() 167 when using static libraries. 168 169 Level: developer 170 171 .keywords: PetscFE, initialize, package 172 .seealso: PetscInitialize() 173 @*/ 174 PetscErrorCode PetscFEInitializePackage(void) 175 { 176 char logList[256]; 177 char *className; 178 PetscBool opt; 179 PetscErrorCode ierr; 180 181 PetscFunctionBegin; 182 if (PetscFEPackageInitialized) PetscFunctionReturn(0); 183 PetscFEPackageInitialized = PETSC_TRUE; 184 185 /* Register Classes */ 186 ierr = PetscClassIdRegister("Linear Space", &PETSCSPACE_CLASSID);CHKERRQ(ierr); 187 ierr = PetscClassIdRegister("Dual Space", &PETSCDUALSPACE_CLASSID);CHKERRQ(ierr); 188 ierr = PetscClassIdRegister("FE Space", &PETSCFE_CLASSID);CHKERRQ(ierr); 189 190 /* Register Constructors */ 191 ierr = PetscSpaceRegisterAll();CHKERRQ(ierr); 192 /* Register Events */ 193 /* Process info exclusions */ 194 ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 195 if (opt) { 196 ierr = PetscStrstr(logList, "fe", &className);CHKERRQ(ierr); 197 if (className) { 198 ierr = PetscInfoDeactivateClass(PETSCFE_CLASSID);CHKERRQ(ierr); 199 } 200 } 201 /* Process summary exclusions */ 202 ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr); 203 if (opt) { 204 ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr); 205 if (className) { 206 ierr = PetscLogEventDeactivateClass(DM_CLASSID);CHKERRQ(ierr); 207 } 208 } 209 ierr = PetscRegisterFinalize(PetscFEFinalizePackage);CHKERRQ(ierr); 210 PetscFunctionReturn(0); 211 } 212 213 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 214 #undef __FUNCT__ 215 #define __FUNCT__ "PetscDLLibraryRegister_petscdm" 216 /* 217 PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 218 219 This one registers all the mesh generators and partitioners that are in 220 the basic DM library. 221 222 */ 223 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void) 224 { 225 PetscErrorCode ierr; 226 227 PetscFunctionBegin; 228 ierr = AOInitializePackage();CHKERRQ(ierr); 229 ierr = DMInitializePackage();CHKERRQ(ierr); 230 ierr = PetscFEInitializePackage();CHKERRQ(ierr); 231 PetscFunctionReturn(0); 232 } 233 234 #endif /* PETSC_USE_DYNAMIC_LIBRARIES */ 235