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