1 2 #include <petsc-private/dmdaimpl.h> 3 #include <petsc-private/dmpleximpl.h> 4 5 static PetscBool DMPackageInitialized = PETSC_FALSE; 6 #undef __FUNCT__ 7 #define __FUNCT__ "DMFinalizePackage" 8 /*@C 9 DMFinalizePackage - This function finalizes everything in the DM package. It is called 10 from PetscFinalize(). 11 12 Level: developer 13 14 .keywords: AO, initialize, package 15 .seealso: PetscInitialize() 16 @*/ 17 PetscErrorCode DMFinalizePackage(void) 18 { 19 PetscErrorCode ierr; 20 21 PetscFunctionBegin; 22 ierr = PetscFunctionListDestroy(&DMList);CHKERRQ(ierr); 23 DMPackageInitialized = PETSC_FALSE; 24 DMRegisterAllCalled = PETSC_FALSE; 25 PetscFunctionReturn(0); 26 } 27 28 #if defined(PETSC_HAVE_HYPRE) 29 PETSC_EXTERN PetscErrorCode MatCreate_HYPREStruct(Mat); 30 #endif 31 32 #undef __FUNCT__ 33 #define __FUNCT__ "DMInitializePackage" 34 /*@C 35 DMInitializePackage - This function initializes everything in the DM package. It is called 36 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to AOCreate() 37 or DMDACreate() when using static libraries. 38 39 Level: developer 40 41 .keywords: AO, initialize, package 42 .seealso: PetscInitialize() 43 @*/ 44 PetscErrorCode DMInitializePackage(void) 45 { 46 char logList[256]; 47 char *className; 48 PetscBool opt; 49 PetscErrorCode ierr; 50 51 PetscFunctionBegin; 52 if (DMPackageInitialized) PetscFunctionReturn(0); 53 DMPackageInitialized = PETSC_TRUE; 54 55 /* Register Classes */ 56 ierr = PetscClassIdRegister("Distributed Mesh",&DM_CLASSID);CHKERRQ(ierr); 57 58 #if defined(PETSC_HAVE_HYPRE) 59 ierr = MatRegister(MATHYPRESTRUCT, MatCreate_HYPREStruct);CHKERRQ(ierr); 60 #endif 61 62 /* Register Constructors */ 63 ierr = DMRegisterAll();CHKERRQ(ierr); 64 /* Register Events */ 65 ierr = PetscLogEventRegister("DMConvert", DM_CLASSID,&DM_Convert);CHKERRQ(ierr); 66 ierr = PetscLogEventRegister("DMGlobalToLocal", DM_CLASSID,&DM_GlobalToLocal);CHKERRQ(ierr); 67 ierr = PetscLogEventRegister("DMLocalToGlobal", DM_CLASSID,&DM_LocalToGlobal);CHKERRQ(ierr); 68 69 ierr = PetscLogEventRegister("DMDALocalADFunc", DM_CLASSID,&DMDA_LocalADFunction);CHKERRQ(ierr); 70 71 ierr = PetscLogEventRegister("DMPlexPartition", DM_CLASSID,&DMPLEX_Partition);CHKERRQ(ierr); 72 ierr = PetscLogEventRegister("DMPlexDistribute", DM_CLASSID,&DMPLEX_Distribute);CHKERRQ(ierr); 73 ierr = PetscLogEventRegister("DMPlexDistributeLabels", DM_CLASSID,&DMPLEX_DistributeLabels);CHKERRQ(ierr); 74 ierr = PetscLogEventRegister("DMPlexDistributeSF", DM_CLASSID,&DMPLEX_DistributeSF);CHKERRQ(ierr); 75 ierr = PetscLogEventRegister("DMPlexStratify", DM_CLASSID,&DMPLEX_Stratify);CHKERRQ(ierr); 76 ierr = PetscLogEventRegister("DMPlexResidualFEM", DM_CLASSID,&DMPLEX_ResidualFEM);CHKERRQ(ierr); 77 ierr = PetscLogEventRegister("DMPlexJacobianFEM", DM_CLASSID,&DMPLEX_JacobianFEM);CHKERRQ(ierr); 78 /* Process info exclusions */ 79 ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 80 if (opt) { 81 ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr); 82 if (className) { 83 ierr = PetscInfoDeactivateClass(DM_CLASSID);CHKERRQ(ierr); 84 } 85 } 86 /* Process summary exclusions */ 87 ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr); 88 if (opt) { 89 ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr); 90 if (className) { 91 ierr = PetscLogEventDeactivateClass(DM_CLASSID);CHKERRQ(ierr); 92 } 93 } 94 ierr = PetscRegisterFinalize(DMFinalizePackage);CHKERRQ(ierr); 95 PetscFunctionReturn(0); 96 } 97 #include <petscfe.h> 98 99 static PetscBool PetscFEPackageInitialized = PETSC_FALSE; 100 #undef __FUNCT__ 101 #define __FUNCT__ "PetscFEFinalizePackage" 102 /*@C 103 PetscFEFinalizePackage - This function finalizes everything in the PetscFE package. It is called 104 from PetscFinalize(). 105 106 Level: developer 107 108 .keywords: PetscFE, initialize, package 109 .seealso: PetscInitialize() 110 @*/ 111 PetscErrorCode PetscFEFinalizePackage(void) 112 { 113 PetscErrorCode ierr; 114 115 PetscFunctionBegin; 116 ierr = PetscFunctionListDestroy(&PetscSpaceList);CHKERRQ(ierr); 117 ierr = PetscFunctionListDestroy(&PetscDualSpaceList);CHKERRQ(ierr); 118 ierr = PetscFunctionListDestroy(&PetscFEList);CHKERRQ(ierr); 119 PetscFEPackageInitialized = PETSC_FALSE; 120 PetscSpaceRegisterAllCalled = PETSC_FALSE; 121 PetscDualSpaceRegisterAllCalled = PETSC_FALSE; 122 PetscFERegisterAllCalled = PETSC_FALSE; 123 PetscFunctionReturn(0); 124 } 125 126 #undef __FUNCT__ 127 #define __FUNCT__ "PetscFEInitializePackage" 128 /*@C 129 PetscFEInitializePackage - This function initializes everything in the FE package. It is called 130 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscSpaceCreate() 131 when using static libraries. 132 133 Level: developer 134 135 .keywords: PetscFE, initialize, package 136 .seealso: PetscInitialize() 137 @*/ 138 PetscErrorCode PetscFEInitializePackage(void) 139 { 140 char logList[256]; 141 char *className; 142 PetscBool opt; 143 PetscErrorCode ierr; 144 145 PetscFunctionBegin; 146 if (PetscFEPackageInitialized) PetscFunctionReturn(0); 147 PetscFEPackageInitialized = PETSC_TRUE; 148 149 /* Register Classes */ 150 ierr = PetscClassIdRegister("Linear Space", &PETSCSPACE_CLASSID);CHKERRQ(ierr); 151 ierr = PetscClassIdRegister("Dual Space", &PETSCDUALSPACE_CLASSID);CHKERRQ(ierr); 152 ierr = PetscClassIdRegister("FE Space", &PETSCFE_CLASSID);CHKERRQ(ierr); 153 154 /* Register Constructors */ 155 ierr = PetscSpaceRegisterAll();CHKERRQ(ierr); 156 ierr = PetscDualSpaceRegisterAll();CHKERRQ(ierr); 157 ierr = PetscFERegisterAll();CHKERRQ(ierr); 158 /* Register Events */ 159 /* Process info exclusions */ 160 ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 161 if (opt) { 162 ierr = PetscStrstr(logList, "fe", &className);CHKERRQ(ierr); 163 if (className) { 164 ierr = PetscInfoDeactivateClass(PETSCFE_CLASSID);CHKERRQ(ierr); 165 } 166 } 167 /* Process summary exclusions */ 168 ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr); 169 if (opt) { 170 ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr); 171 if (className) { 172 ierr = PetscLogEventDeactivateClass(DM_CLASSID);CHKERRQ(ierr); 173 } 174 } 175 ierr = PetscRegisterFinalize(PetscFEFinalizePackage);CHKERRQ(ierr); 176 PetscFunctionReturn(0); 177 } 178 179 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 180 #undef __FUNCT__ 181 #define __FUNCT__ "PetscDLLibraryRegister_petscdm" 182 /* 183 PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 184 185 This one registers all the mesh generators and partitioners that are in 186 the basic DM library. 187 188 */ 189 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void) 190 { 191 PetscErrorCode ierr; 192 193 PetscFunctionBegin; 194 ierr = AOInitializePackage();CHKERRQ(ierr); 195 ierr = DMInitializePackage();CHKERRQ(ierr); 196 ierr = PetscFEInitializePackage();CHKERRQ(ierr); 197 PetscFunctionReturn(0); 198 } 199 200 #endif /* PETSC_USE_DYNAMIC_LIBRARIES */ 201