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 PETSC_EXTERN PetscErrorCode MatCreate_HYPREStruct(Mat); 38 #endif 39 40 #undef __FUNCT__ 41 #define __FUNCT__ "DMInitializePackage" 42 /*@C 43 DMInitializePackage - This function initializes everything in the DM package. It is called 44 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to AOCreate() 45 or DMDACreate() when using static libraries. 46 47 Level: developer 48 49 .keywords: AO, initialize, package 50 .seealso: PetscInitialize() 51 @*/ 52 PetscErrorCode DMInitializePackage(void) 53 { 54 char logList[256]; 55 char *className; 56 PetscBool opt; 57 PetscErrorCode ierr; 58 59 PetscFunctionBegin; 60 if (DMPackageInitialized) PetscFunctionReturn(0); 61 DMPackageInitialized = PETSC_TRUE; 62 63 /* Register Classes */ 64 ierr = PetscClassIdRegister("Distributed Mesh",&DM_CLASSID);CHKERRQ(ierr); 65 #if defined(PETSC_HAVE_SIEVE) 66 ierr = PetscClassIdRegister("SectionReal",&SECTIONREAL_CLASSID);CHKERRQ(ierr); 67 ierr = PetscClassIdRegister("SectionInt",&SECTIONINT_CLASSID);CHKERRQ(ierr); 68 #endif 69 70 #if defined(PETSC_HAVE_HYPRE) 71 ierr = MatRegister(MATHYPRESTRUCT, MatCreate_HYPREStruct);CHKERRQ(ierr); 72 #endif 73 74 /* Register Constructors */ 75 ierr = DMRegisterAll();CHKERRQ(ierr); 76 /* Register Events */ 77 ierr = PetscLogEventRegister("DMConvert", DM_CLASSID,&DM_Convert);CHKERRQ(ierr); 78 ierr = PetscLogEventRegister("DMGlobalToLocal", DM_CLASSID,&DM_GlobalToLocal);CHKERRQ(ierr); 79 ierr = PetscLogEventRegister("DMLocalToGlobal", DM_CLASSID,&DM_LocalToGlobal);CHKERRQ(ierr); 80 81 ierr = PetscLogEventRegister("DMDALocalADFunc", DM_CLASSID,&DMDA_LocalADFunction);CHKERRQ(ierr); 82 83 ierr = PetscLogEventRegister("DMPlexDistribute", DM_CLASSID,&DMPLEX_Distribute);CHKERRQ(ierr); 84 ierr = PetscLogEventRegister("DMPlexStratify", DM_CLASSID,&DMPLEX_Stratify);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 136 137 138 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 139 #undef __FUNCT__ 140 #define __FUNCT__ "PetscDLLibraryRegister_petscdm" 141 /* 142 PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 143 144 This one registers all the mesh generators and partitioners that are in 145 the basic DM library. 146 147 */ 148 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void) 149 { 150 PetscErrorCode ierr; 151 152 PetscFunctionBegin; 153 ierr = AOInitializePackage();CHKERRQ(ierr); 154 ierr = DMInitializePackage();CHKERRQ(ierr); 155 PetscFunctionReturn(0); 156 } 157 158 #endif /* PETSC_USE_DYNAMIC_LIBRARIES */ 159