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("DMPlexInterpolate", DM_CLASSID,&DMPLEX_Interpolate);CHKERRQ(ierr); 72 ierr = PetscLogEventRegister("DMPlexPartition", DM_CLASSID,&DMPLEX_Partition);CHKERRQ(ierr); 73 ierr = PetscLogEventRegister("DMPlexDistribute", DM_CLASSID,&DMPLEX_Distribute);CHKERRQ(ierr); 74 ierr = PetscLogEventRegister("DMPlexDistributeLabels", DM_CLASSID,&DMPLEX_DistributeLabels);CHKERRQ(ierr); 75 ierr = PetscLogEventRegister("DMPlexDistributeSF", DM_CLASSID,&DMPLEX_DistributeSF);CHKERRQ(ierr); 76 ierr = PetscLogEventRegister("DMPlexStratify", DM_CLASSID,&DMPLEX_Stratify);CHKERRQ(ierr); 77 ierr = PetscLogEventRegister("DMPlexPreallocate", DM_CLASSID,&DMPLEX_Preallocate);CHKERRQ(ierr); 78 ierr = PetscLogEventRegister("DMPlexResidualFEM", DM_CLASSID,&DMPLEX_ResidualFEM);CHKERRQ(ierr); 79 ierr = PetscLogEventRegister("DMPlexJacobianFEM", DM_CLASSID,&DMPLEX_JacobianFEM);CHKERRQ(ierr); 80 /* Process info exclusions */ 81 ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 82 if (opt) { 83 ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr); 84 if (className) { 85 ierr = PetscInfoDeactivateClass(DM_CLASSID);CHKERRQ(ierr); 86 } 87 } 88 /* Process summary exclusions */ 89 ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr); 90 if (opt) { 91 ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr); 92 if (className) { 93 ierr = PetscLogEventDeactivateClass(DM_CLASSID);CHKERRQ(ierr); 94 } 95 } 96 ierr = PetscRegisterFinalize(DMFinalizePackage);CHKERRQ(ierr); 97 PetscFunctionReturn(0); 98 } 99 #include <petscfe.h> 100 101 static PetscBool PetscFEPackageInitialized = PETSC_FALSE; 102 #undef __FUNCT__ 103 #define __FUNCT__ "PetscFEFinalizePackage" 104 /*@C 105 PetscFEFinalizePackage - This function finalizes everything in the PetscFE package. It is called 106 from PetscFinalize(). 107 108 Level: developer 109 110 .keywords: PetscFE, initialize, package 111 .seealso: PetscInitialize() 112 @*/ 113 PetscErrorCode PetscFEFinalizePackage(void) 114 { 115 PetscErrorCode ierr; 116 117 PetscFunctionBegin; 118 ierr = PetscFunctionListDestroy(&PetscSpaceList);CHKERRQ(ierr); 119 ierr = PetscFunctionListDestroy(&PetscDualSpaceList);CHKERRQ(ierr); 120 ierr = PetscFunctionListDestroy(&PetscFEList);CHKERRQ(ierr); 121 PetscFEPackageInitialized = PETSC_FALSE; 122 PetscSpaceRegisterAllCalled = PETSC_FALSE; 123 PetscDualSpaceRegisterAllCalled = PETSC_FALSE; 124 PetscFERegisterAllCalled = PETSC_FALSE; 125 PetscFunctionReturn(0); 126 } 127 128 #undef __FUNCT__ 129 #define __FUNCT__ "PetscFEInitializePackage" 130 /*@C 131 PetscFEInitializePackage - This function initializes everything in the FE package. It is called 132 from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscSpaceCreate() 133 when using static libraries. 134 135 Level: developer 136 137 .keywords: PetscFE, initialize, package 138 .seealso: PetscInitialize() 139 @*/ 140 PetscErrorCode PetscFEInitializePackage(void) 141 { 142 char logList[256]; 143 char *className; 144 PetscBool opt; 145 PetscErrorCode ierr; 146 147 PetscFunctionBegin; 148 if (PetscFEPackageInitialized) PetscFunctionReturn(0); 149 PetscFEPackageInitialized = PETSC_TRUE; 150 151 /* Register Classes */ 152 ierr = PetscClassIdRegister("Linear Space", &PETSCSPACE_CLASSID);CHKERRQ(ierr); 153 ierr = PetscClassIdRegister("Dual Space", &PETSCDUALSPACE_CLASSID);CHKERRQ(ierr); 154 ierr = PetscClassIdRegister("FE Space", &PETSCFE_CLASSID);CHKERRQ(ierr); 155 156 /* Register Constructors */ 157 ierr = PetscSpaceRegisterAll();CHKERRQ(ierr); 158 ierr = PetscDualSpaceRegisterAll();CHKERRQ(ierr); 159 ierr = PetscFERegisterAll();CHKERRQ(ierr); 160 /* Register Events */ 161 /* Process info exclusions */ 162 ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 163 if (opt) { 164 ierr = PetscStrstr(logList, "fe", &className);CHKERRQ(ierr); 165 if (className) { 166 ierr = PetscInfoDeactivateClass(PETSCFE_CLASSID);CHKERRQ(ierr); 167 } 168 } 169 /* Process summary exclusions */ 170 ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr); 171 if (opt) { 172 ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr); 173 if (className) { 174 ierr = PetscLogEventDeactivateClass(DM_CLASSID);CHKERRQ(ierr); 175 } 176 } 177 ierr = PetscRegisterFinalize(PetscFEFinalizePackage);CHKERRQ(ierr); 178 PetscFunctionReturn(0); 179 } 180 181 #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES) 182 #undef __FUNCT__ 183 #define __FUNCT__ "PetscDLLibraryRegister_petscdm" 184 /* 185 PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 186 187 This one registers all the mesh generators and partitioners that are in 188 the basic DM library. 189 190 */ 191 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void) 192 { 193 PetscErrorCode ierr; 194 195 PetscFunctionBegin; 196 ierr = AOInitializePackage();CHKERRQ(ierr); 197 ierr = DMInitializePackage();CHKERRQ(ierr); 198 ierr = PetscFEInitializePackage();CHKERRQ(ierr); 199 PetscFunctionReturn(0); 200 } 201 202 #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */ 203