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 #if defined(PETSC_HAVE_SIEVE) 87 ierr = PetscLogEventRegister("DMMeshView", DM_CLASSID,&DMMesh_View);CHKERRQ(ierr); 88 ierr = PetscLogEventRegister("DMMeshGetGlobalScatter", DM_CLASSID,&DMMesh_GetGlobalScatter);CHKERRQ(ierr); 89 ierr = PetscLogEventRegister("DMMeshRestrictVector", DM_CLASSID,&DMMesh_restrictVector);CHKERRQ(ierr); 90 ierr = PetscLogEventRegister("DMMeshAssembleVector", DM_CLASSID,&DMMesh_assembleVector);CHKERRQ(ierr); 91 ierr = PetscLogEventRegister("DMMeshAssemVecComplete", DM_CLASSID,&DMMesh_assembleVectorComplete);CHKERRQ(ierr); 92 ierr = PetscLogEventRegister("DMMeshAssembleMatrix", DM_CLASSID,&DMMesh_assembleMatrix);CHKERRQ(ierr); 93 ierr = PetscLogEventRegister("DMMeshUpdateOperator", DM_CLASSID,&DMMesh_updateOperator);CHKERRQ(ierr); 94 ierr = PetscLogEventRegister("SectionRealView", SECTIONREAL_CLASSID,&SectionReal_View);CHKERRQ(ierr); 95 ierr = PetscLogEventRegister("SectionIntView", SECTIONINT_CLASSID,&SectionInt_View);CHKERRQ(ierr); 96 #endif 97 /* Process info exclusions */ 98 ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 99 if (opt) { 100 ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr); 101 if (className) { 102 ierr = PetscInfoDeactivateClass(DM_CLASSID);CHKERRQ(ierr); 103 } 104 #if defined(PETSC_HAVE_SIEVE) 105 ierr = PetscStrstr(logList, "sectionreal", &className);CHKERRQ(ierr); 106 if (className) { 107 ierr = PetscInfoDeactivateClass(SECTIONREAL_CLASSID);CHKERRQ(ierr); 108 } 109 ierr = PetscStrstr(logList, "sectionint", &className);CHKERRQ(ierr); 110 if (className) { 111 ierr = PetscInfoDeactivateClass(SECTIONINT_CLASSID);CHKERRQ(ierr); 112 } 113 #endif 114 } 115 /* Process summary exclusions */ 116 ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr); 117 if (opt) { 118 ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr); 119 if (className) { 120 ierr = PetscLogEventDeactivateClass(DM_CLASSID);CHKERRQ(ierr); 121 } 122 #if defined(PETSC_HAVE_SIEVE) 123 ierr = PetscStrstr(logList, "sectionreal", &className);CHKERRQ(ierr); 124 if (className) { 125 ierr = PetscLogEventDeactivateClass(SECTIONREAL_CLASSID);CHKERRQ(ierr); 126 } 127 ierr = PetscStrstr(logList, "sectionint", &className);CHKERRQ(ierr); 128 if (className) { 129 ierr = PetscLogEventDeactivateClass(SECTIONINT_CLASSID);CHKERRQ(ierr); 130 } 131 #endif 132 } 133 ierr = PetscRegisterFinalize(DMFinalizePackage);CHKERRQ(ierr); 134 PetscFunctionReturn(0); 135 } 136 137 138 139 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 140 #undef __FUNCT__ 141 #define __FUNCT__ "PetscDLLibraryRegister_petscdm" 142 /* 143 PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 144 145 This one registers all the mesh generators and partitioners that are in 146 the basic DM library. 147 148 */ 149 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void) 150 { 151 PetscErrorCode ierr; 152 153 PetscFunctionBegin; 154 ierr = AOInitializePackage();CHKERRQ(ierr); 155 ierr = DMInitializePackage();CHKERRQ(ierr); 156 PetscFunctionReturn(0); 157 } 158 159 #endif /* PETSC_USE_DYNAMIC_LIBRARIES */ 160