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