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 #if defined(PETSC_HAVE_SIEVE) 85 ierr = PetscLogEventRegister("DMMeshView", DM_CLASSID,&DMMesh_View);CHKERRQ(ierr); 86 ierr = PetscLogEventRegister("DMMeshGetGlobalScatter", DM_CLASSID,&DMMesh_GetGlobalScatter);CHKERRQ(ierr); 87 ierr = PetscLogEventRegister("DMMeshRestrictVector", DM_CLASSID,&DMMesh_restrictVector);CHKERRQ(ierr); 88 ierr = PetscLogEventRegister("DMMeshAssembleVector", DM_CLASSID,&DMMesh_assembleVector);CHKERRQ(ierr); 89 ierr = PetscLogEventRegister("DMMeshAssemVecComplete", DM_CLASSID,&DMMesh_assembleVectorComplete);CHKERRQ(ierr); 90 ierr = PetscLogEventRegister("DMMeshAssembleMatrix", DM_CLASSID,&DMMesh_assembleMatrix);CHKERRQ(ierr); 91 ierr = PetscLogEventRegister("DMMeshUpdateOperator", DM_CLASSID,&DMMesh_updateOperator);CHKERRQ(ierr); 92 ierr = PetscLogEventRegister("SectionRealView", SECTIONREAL_CLASSID,&SectionReal_View);CHKERRQ(ierr); 93 ierr = PetscLogEventRegister("SectionIntView", SECTIONINT_CLASSID,&SectionInt_View);CHKERRQ(ierr); 94 #endif 95 /* Process info exclusions */ 96 ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 97 if (opt) { 98 ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr); 99 if (className) { 100 ierr = PetscInfoDeactivateClass(DM_CLASSID);CHKERRQ(ierr); 101 } 102 #if defined(PETSC_HAVE_SIEVE) 103 ierr = PetscStrstr(logList, "sectionreal", &className);CHKERRQ(ierr); 104 if (className) { 105 ierr = PetscInfoDeactivateClass(SECTIONREAL_CLASSID);CHKERRQ(ierr); 106 } 107 ierr = PetscStrstr(logList, "sectionint", &className);CHKERRQ(ierr); 108 if (className) { 109 ierr = PetscInfoDeactivateClass(SECTIONINT_CLASSID);CHKERRQ(ierr); 110 } 111 #endif 112 } 113 /* Process summary exclusions */ 114 ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr); 115 if (opt) { 116 ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr); 117 if (className) { 118 ierr = PetscLogEventDeactivateClass(DM_CLASSID);CHKERRQ(ierr); 119 } 120 #if defined(PETSC_HAVE_SIEVE) 121 ierr = PetscStrstr(logList, "sectionreal", &className);CHKERRQ(ierr); 122 if (className) { 123 ierr = PetscLogEventDeactivateClass(SECTIONREAL_CLASSID);CHKERRQ(ierr); 124 } 125 ierr = PetscStrstr(logList, "sectionint", &className);CHKERRQ(ierr); 126 if (className) { 127 ierr = PetscLogEventDeactivateClass(SECTIONINT_CLASSID);CHKERRQ(ierr); 128 } 129 #endif 130 } 131 ierr = PetscRegisterFinalize(DMFinalizePackage);CHKERRQ(ierr); 132 PetscFunctionReturn(0); 133 } 134 #include <petscfe.h> 135 136 static PetscBool PetscFEPackageInitialized = PETSC_FALSE; 137 #undef __FUNCT__ 138 #define __FUNCT__ "PetscFEFinalizePackage" 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 PetscFEPackageInitialized = PETSC_FALSE; 156 PetscSpaceRegisterAllCalled = PETSC_FALSE; 157 PetscDualSpaceRegisterAllCalled = PETSC_FALSE; 158 PetscFunctionReturn(0); 159 } 160 161 #undef __FUNCT__ 162 #define __FUNCT__ "PetscFEInitializePackage" 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 char *className; 177 PetscBool opt; 178 PetscErrorCode ierr; 179 180 PetscFunctionBegin; 181 if (PetscFEPackageInitialized) PetscFunctionReturn(0); 182 PetscFEPackageInitialized = PETSC_TRUE; 183 184 /* Register Classes */ 185 ierr = PetscClassIdRegister("Linear Space", &PETSCSPACE_CLASSID);CHKERRQ(ierr); 186 ierr = PetscClassIdRegister("Dual Space", &PETSCDUALSPACE_CLASSID);CHKERRQ(ierr); 187 ierr = PetscClassIdRegister("FE Space", &PETSCFE_CLASSID);CHKERRQ(ierr); 188 189 /* Register Constructors */ 190 ierr = PetscSpaceRegisterAll();CHKERRQ(ierr); 191 /* Register Events */ 192 /* Process info exclusions */ 193 ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 194 if (opt) { 195 ierr = PetscStrstr(logList, "fe", &className);CHKERRQ(ierr); 196 if (className) { 197 ierr = PetscInfoDeactivateClass(PETSCFE_CLASSID);CHKERRQ(ierr); 198 } 199 } 200 /* Process summary exclusions */ 201 ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr); 202 if (opt) { 203 ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr); 204 if (className) { 205 ierr = PetscLogEventDeactivateClass(DM_CLASSID);CHKERRQ(ierr); 206 } 207 } 208 ierr = PetscRegisterFinalize(PetscFEFinalizePackage);CHKERRQ(ierr); 209 PetscFunctionReturn(0); 210 } 211 212 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 213 #undef __FUNCT__ 214 #define __FUNCT__ "PetscDLLibraryRegister_petscdm" 215 /* 216 PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 217 218 This one registers all the mesh generators and partitioners that are in 219 the basic DM library. 220 221 */ 222 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void) 223 { 224 PetscErrorCode ierr; 225 226 PetscFunctionBegin; 227 ierr = AOInitializePackage();CHKERRQ(ierr); 228 ierr = DMInitializePackage();CHKERRQ(ierr); 229 ierr = PetscFEInitializePackage();CHKERRQ(ierr); 230 PetscFunctionReturn(0); 231 } 232 233 #endif /* PETSC_USE_DYNAMIC_LIBRARIES */ 234