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