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 ierr = PetscFunctionListDestroy(&PetscFEList);CHKERRQ(ierr); 157 PetscFEPackageInitialized = PETSC_FALSE; 158 PetscSpaceRegisterAllCalled = PETSC_FALSE; 159 PetscDualSpaceRegisterAllCalled = PETSC_FALSE; 160 PetscFERegisterAllCalled = PETSC_FALSE; 161 PetscFunctionReturn(0); 162 } 163 164 #undef __FUNCT__ 165 #define __FUNCT__ "PetscFEInitializePackage" 166 /*@C 167 PetscFEInitializePackage - This function initializes everything in the FE package. It is called 168 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscSpaceCreate() 169 when using static libraries. 170 171 Level: developer 172 173 .keywords: PetscFE, initialize, package 174 .seealso: PetscInitialize() 175 @*/ 176 PetscErrorCode PetscFEInitializePackage(void) 177 { 178 char logList[256]; 179 char *className; 180 PetscBool opt; 181 PetscErrorCode ierr; 182 183 PetscFunctionBegin; 184 if (PetscFEPackageInitialized) PetscFunctionReturn(0); 185 PetscFEPackageInitialized = PETSC_TRUE; 186 187 /* Register Classes */ 188 ierr = PetscClassIdRegister("Linear Space", &PETSCSPACE_CLASSID);CHKERRQ(ierr); 189 ierr = PetscClassIdRegister("Dual Space", &PETSCDUALSPACE_CLASSID);CHKERRQ(ierr); 190 ierr = PetscClassIdRegister("FE Space", &PETSCFE_CLASSID);CHKERRQ(ierr); 191 192 /* Register Constructors */ 193 ierr = PetscSpaceRegisterAll();CHKERRQ(ierr); 194 ierr = PetscDualSpaceRegisterAll();CHKERRQ(ierr); 195 ierr = PetscFERegisterAll();CHKERRQ(ierr); 196 /* Register Events */ 197 /* Process info exclusions */ 198 ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 199 if (opt) { 200 ierr = PetscStrstr(logList, "fe", &className);CHKERRQ(ierr); 201 if (className) { 202 ierr = PetscInfoDeactivateClass(PETSCFE_CLASSID);CHKERRQ(ierr); 203 } 204 } 205 /* Process summary exclusions */ 206 ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr); 207 if (opt) { 208 ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr); 209 if (className) { 210 ierr = PetscLogEventDeactivateClass(DM_CLASSID);CHKERRQ(ierr); 211 } 212 } 213 ierr = PetscRegisterFinalize(PetscFEFinalizePackage);CHKERRQ(ierr); 214 PetscFunctionReturn(0); 215 } 216 217 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 218 #undef __FUNCT__ 219 #define __FUNCT__ "PetscDLLibraryRegister_petscdm" 220 /* 221 PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 222 223 This one registers all the mesh generators and partitioners that are in 224 the basic DM library. 225 226 */ 227 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void) 228 { 229 PetscErrorCode ierr; 230 231 PetscFunctionBegin; 232 ierr = AOInitializePackage();CHKERRQ(ierr); 233 ierr = DMInitializePackage();CHKERRQ(ierr); 234 ierr = PetscFEInitializePackage();CHKERRQ(ierr); 235 PetscFunctionReturn(0); 236 } 237 238 #endif /* PETSC_USE_DYNAMIC_LIBRARIES */ 239