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 #if defined(PETSC_HAVE_SIEVE) 23 PetscErrorCode ierr; 24 #endif 25 26 PetscFunctionBegin; 27 DMPackageInitialized = PETSC_FALSE; 28 DMList = NULL; 29 DMRegisterAllCalled = PETSC_FALSE; 30 #if defined(PETSC_HAVE_SIEVE) 31 ierr = DMMeshFinalize();CHKERRQ(ierr); 32 #endif 33 PetscFunctionReturn(0); 34 } 35 36 #if defined(PETSC_HAVE_HYPRE) 37 EXTERN_C_BEGIN 38 extern PetscErrorCode MatCreate_HYPREStruct(Mat); 39 EXTERN_C_END 40 #endif 41 42 #undef __FUNCT__ 43 #define __FUNCT__ "DMInitializePackage" 44 /*@C 45 DMInitializePackage - This function initializes everything in the DM package. It is called 46 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to AOCreate() 47 or DMDACreate() when using static libraries. 48 49 Input Parameter: 50 path - The dynamic library path, or NULL 51 52 Level: developer 53 54 .keywords: AO, initialize, package 55 .seealso: PetscInitialize() 56 @*/ 57 PetscErrorCode DMInitializePackage(const char path[]) 58 { 59 char logList[256]; 60 char *className; 61 PetscBool opt; 62 PetscErrorCode ierr; 63 64 PetscFunctionBegin; 65 if (DMPackageInitialized) PetscFunctionReturn(0); 66 DMPackageInitialized = PETSC_TRUE; 67 68 /* Register Classes */ 69 ierr = PetscClassIdRegister("Distributed Mesh",&DM_CLASSID);CHKERRQ(ierr); 70 #if defined(PETSC_HAVE_SIEVE) 71 ierr = PetscClassIdRegister("SectionReal",&SECTIONREAL_CLASSID);CHKERRQ(ierr); 72 ierr = PetscClassIdRegister("SectionInt",&SECTIONINT_CLASSID);CHKERRQ(ierr); 73 #endif 74 75 #if defined(PETSC_HAVE_HYPRE) 76 ierr = MatRegisterDynamic(MATHYPRESTRUCT, path,"MatCreate_HYPREStruct", MatCreate_HYPREStruct);CHKERRQ(ierr); 77 #endif 78 79 /* Register Constructors */ 80 ierr = DMRegisterAll(path);CHKERRQ(ierr); 81 /* Register Events */ 82 ierr = PetscLogEventRegister("DMConvert", DM_CLASSID,&DM_Convert);CHKERRQ(ierr); 83 ierr = PetscLogEventRegister("DMGlobalToLocal", DM_CLASSID,&DM_GlobalToLocal);CHKERRQ(ierr); 84 ierr = PetscLogEventRegister("DMLocalToGlobal", DM_CLASSID,&DM_LocalToGlobal);CHKERRQ(ierr); 85 86 ierr = PetscLogEventRegister("DMDALocalADFunc", DM_CLASSID,&DMDA_LocalADFunction);CHKERRQ(ierr); 87 88 ierr = PetscLogEventRegister("DMPlexDistribute", DM_CLASSID,&DMPLEX_Distribute);CHKERRQ(ierr); 89 ierr = PetscLogEventRegister("DMPlexStratify", DM_CLASSID,&DMPLEX_Stratify);CHKERRQ(ierr); 90 #if defined(PETSC_HAVE_SIEVE) 91 ierr = PetscLogEventRegister("DMMeshView", DM_CLASSID,&DMMesh_View);CHKERRQ(ierr); 92 ierr = PetscLogEventRegister("DMMeshGetGlobalScatter", DM_CLASSID,&DMMesh_GetGlobalScatter);CHKERRQ(ierr); 93 ierr = PetscLogEventRegister("DMMeshRestrictVector", DM_CLASSID,&DMMesh_restrictVector);CHKERRQ(ierr); 94 ierr = PetscLogEventRegister("DMMeshAssembleVector", DM_CLASSID,&DMMesh_assembleVector);CHKERRQ(ierr); 95 ierr = PetscLogEventRegister("DMMeshAssemVecComplete", DM_CLASSID,&DMMesh_assembleVectorComplete);CHKERRQ(ierr); 96 ierr = PetscLogEventRegister("DMMeshAssembleMatrix", DM_CLASSID,&DMMesh_assembleMatrix);CHKERRQ(ierr); 97 ierr = PetscLogEventRegister("DMMeshUpdateOperator", DM_CLASSID,&DMMesh_updateOperator);CHKERRQ(ierr); 98 ierr = PetscLogEventRegister("SectionRealView", SECTIONREAL_CLASSID,&SectionReal_View);CHKERRQ(ierr); 99 ierr = PetscLogEventRegister("SectionIntView", SECTIONINT_CLASSID,&SectionInt_View);CHKERRQ(ierr); 100 #endif 101 /* Process info exclusions */ 102 ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 103 if (opt) { 104 ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr); 105 if (className) { 106 ierr = PetscInfoDeactivateClass(DM_CLASSID);CHKERRQ(ierr); 107 } 108 #if defined(PETSC_HAVE_SIEVE) 109 ierr = PetscStrstr(logList, "sectionreal", &className);CHKERRQ(ierr); 110 if (className) { 111 ierr = PetscInfoDeactivateClass(SECTIONREAL_CLASSID);CHKERRQ(ierr); 112 } 113 ierr = PetscStrstr(logList, "sectionint", &className);CHKERRQ(ierr); 114 if (className) { 115 ierr = PetscInfoDeactivateClass(SECTIONINT_CLASSID);CHKERRQ(ierr); 116 } 117 #endif 118 } 119 /* Process summary exclusions */ 120 ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr); 121 if (opt) { 122 ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr); 123 if (className) { 124 ierr = PetscLogEventDeactivateClass(DM_CLASSID);CHKERRQ(ierr); 125 } 126 #if defined(PETSC_HAVE_SIEVE) 127 ierr = PetscStrstr(logList, "sectionreal", &className);CHKERRQ(ierr); 128 if (className) { 129 ierr = PetscLogEventDeactivateClass(SECTIONREAL_CLASSID);CHKERRQ(ierr); 130 } 131 ierr = PetscStrstr(logList, "sectionint", &className);CHKERRQ(ierr); 132 if (className) { 133 ierr = PetscLogEventDeactivateClass(SECTIONINT_CLASSID);CHKERRQ(ierr); 134 } 135 #endif 136 } 137 ierr = PetscRegisterFinalize(DMFinalizePackage);CHKERRQ(ierr); 138 PetscFunctionReturn(0); 139 } 140 141 142 143 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 144 EXTERN_C_BEGIN 145 #undef __FUNCT__ 146 #define __FUNCT__ "PetscDLLibraryRegister_petscdm" 147 /* 148 PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 149 150 This one registers all the mesh generators and partitioners that are in 151 the basic DM library. 152 153 Input Parameter: 154 path - library path 155 */ 156 PetscErrorCode PetscDLLibraryRegister_petscdm(const char path[]) 157 { 158 PetscErrorCode ierr; 159 160 PetscFunctionBegin; 161 ierr = AOInitializePackage(path);CHKERRQ(ierr); 162 ierr = DMInitializePackage(path);CHKERRQ(ierr); 163 PetscFunctionReturn(0); 164 } 165 EXTERN_C_END 166 167 #endif /* PETSC_USE_DYNAMIC_LIBRARIES */ 168