xref: /petsc/src/dm/interface/dlregisdmdm.c (revision a0845e3a928e8c3de76a3c8bfba8b69f6cc922fe)
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("DMPlexDistribute",    DM_CLASSID,&DMPLEX_Distribute);CHKERRQ(ierr);
82   ierr = PetscLogEventRegister("DMPlexStratify",      DM_CLASSID,&DMPLEX_Stratify);CHKERRQ(ierr);
83   ierr = PetscLogEventRegister("DMPlexResidualFEM",      DM_CLASSID,&DMPLEX_ResidualFEM);CHKERRQ(ierr);
84 #if defined(PETSC_HAVE_SIEVE)
85   ierr = PetscLogEventRegister("DMMeshView",             DM_CLASSID,&DMMesh_View);CHKERRQ(ierr);
86   ierr = PetscLogEventRegister("DMMeshGetGlobalScatter", DM_CLASSID,&DMMesh_GetGlobalScatter);CHKERRQ(ierr);
87   ierr = PetscLogEventRegister("DMMeshRestrictVector",   DM_CLASSID,&DMMesh_restrictVector);CHKERRQ(ierr);
88   ierr = PetscLogEventRegister("DMMeshAssembleVector",   DM_CLASSID,&DMMesh_assembleVector);CHKERRQ(ierr);
89   ierr = PetscLogEventRegister("DMMeshAssemVecComplete", DM_CLASSID,&DMMesh_assembleVectorComplete);CHKERRQ(ierr);
90   ierr = PetscLogEventRegister("DMMeshAssembleMatrix",   DM_CLASSID,&DMMesh_assembleMatrix);CHKERRQ(ierr);
91   ierr = PetscLogEventRegister("DMMeshUpdateOperator",   DM_CLASSID,&DMMesh_updateOperator);CHKERRQ(ierr);
92   ierr = PetscLogEventRegister("SectionRealView",        SECTIONREAL_CLASSID,&SectionReal_View);CHKERRQ(ierr);
93   ierr = PetscLogEventRegister("SectionIntView",         SECTIONINT_CLASSID,&SectionInt_View);CHKERRQ(ierr);
94 #endif
95   /* Process info exclusions */
96   ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr);
97   if (opt) {
98     ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr);
99     if (className) {
100       ierr = PetscInfoDeactivateClass(DM_CLASSID);CHKERRQ(ierr);
101     }
102 #if defined(PETSC_HAVE_SIEVE)
103     ierr = PetscStrstr(logList, "sectionreal", &className);CHKERRQ(ierr);
104     if (className) {
105       ierr = PetscInfoDeactivateClass(SECTIONREAL_CLASSID);CHKERRQ(ierr);
106     }
107     ierr = PetscStrstr(logList, "sectionint", &className);CHKERRQ(ierr);
108     if (className) {
109       ierr = PetscInfoDeactivateClass(SECTIONINT_CLASSID);CHKERRQ(ierr);
110     }
111 #endif
112   }
113   /* Process summary exclusions */
114   ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr);
115   if (opt) {
116     ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr);
117     if (className) {
118       ierr = PetscLogEventDeactivateClass(DM_CLASSID);CHKERRQ(ierr);
119     }
120 #if defined(PETSC_HAVE_SIEVE)
121     ierr = PetscStrstr(logList, "sectionreal", &className);CHKERRQ(ierr);
122     if (className) {
123       ierr = PetscLogEventDeactivateClass(SECTIONREAL_CLASSID);CHKERRQ(ierr);
124     }
125     ierr = PetscStrstr(logList, "sectionint", &className);CHKERRQ(ierr);
126     if (className) {
127       ierr = PetscLogEventDeactivateClass(SECTIONINT_CLASSID);CHKERRQ(ierr);
128     }
129 #endif
130   }
131   ierr = PetscRegisterFinalize(DMFinalizePackage);CHKERRQ(ierr);
132   PetscFunctionReturn(0);
133 }
134 #include <petscfe.h>
135 
136 static PetscBool PetscFEPackageInitialized = PETSC_FALSE;
137 #undef __FUNCT__
138 #define __FUNCT__ "PetscFEFinalizePackage"
139 /*@C
140   PetscFEFinalizePackage - This function finalizes everything in the PetscFE package. It is called
141   from PetscFinalize().
142 
143   Level: developer
144 
145 .keywords: PetscFE, initialize, package
146 .seealso: PetscInitialize()
147 @*/
148 PetscErrorCode PetscFEFinalizePackage(void)
149 {
150   PetscErrorCode ierr;
151 
152   PetscFunctionBegin;
153   ierr = PetscFunctionListDestroy(&PetscSpaceList);CHKERRQ(ierr);
154   ierr = PetscFunctionListDestroy(&PetscDualSpaceList);CHKERRQ(ierr);
155   PetscFEPackageInitialized       = PETSC_FALSE;
156   PetscSpaceRegisterAllCalled     = PETSC_FALSE;
157   PetscDualSpaceRegisterAllCalled = PETSC_FALSE;
158   PetscFunctionReturn(0);
159 }
160 
161 #undef __FUNCT__
162 #define __FUNCT__ "PetscFEInitializePackage"
163 /*@C
164   PetscFEInitializePackage - This function initializes everything in the FE package. It is called
165   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscSpaceCreate()
166   when using static libraries.
167 
168   Level: developer
169 
170 .keywords: PetscFE, initialize, package
171 .seealso: PetscInitialize()
172 @*/
173 PetscErrorCode PetscFEInitializePackage(void)
174 {
175   char           logList[256];
176   char          *className;
177   PetscBool      opt;
178   PetscErrorCode ierr;
179 
180   PetscFunctionBegin;
181   if (PetscFEPackageInitialized) PetscFunctionReturn(0);
182   PetscFEPackageInitialized = PETSC_TRUE;
183 
184   /* Register Classes */
185   ierr = PetscClassIdRegister("Linear Space", &PETSCSPACE_CLASSID);CHKERRQ(ierr);
186   ierr = PetscClassIdRegister("Dual Space",   &PETSCDUALSPACE_CLASSID);CHKERRQ(ierr);
187   ierr = PetscClassIdRegister("FE Space",     &PETSCFE_CLASSID);CHKERRQ(ierr);
188 
189   /* Register Constructors */
190   ierr = PetscSpaceRegisterAll();CHKERRQ(ierr);
191   /* Register Events */
192   /* Process info exclusions */
193   ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr);
194   if (opt) {
195     ierr = PetscStrstr(logList, "fe", &className);CHKERRQ(ierr);
196     if (className) {
197       ierr = PetscInfoDeactivateClass(PETSCFE_CLASSID);CHKERRQ(ierr);
198     }
199   }
200   /* Process summary exclusions */
201   ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr);
202   if (opt) {
203     ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr);
204     if (className) {
205       ierr = PetscLogEventDeactivateClass(DM_CLASSID);CHKERRQ(ierr);
206     }
207   }
208   ierr = PetscRegisterFinalize(PetscFEFinalizePackage);CHKERRQ(ierr);
209   PetscFunctionReturn(0);
210 }
211 
212 #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
213 #undef __FUNCT__
214 #define __FUNCT__ "PetscDLLibraryRegister_petscdm"
215 /*
216   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
217 
218   This one registers all the mesh generators and partitioners that are in
219   the basic DM library.
220 
221 */
222 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void)
223 {
224   PetscErrorCode ierr;
225 
226   PetscFunctionBegin;
227   ierr = AOInitializePackage();CHKERRQ(ierr);
228   ierr = DMInitializePackage();CHKERRQ(ierr);
229   ierr = PetscFEInitializePackage();CHKERRQ(ierr);
230   PetscFunctionReturn(0);
231 }
232 
233 #endif /* PETSC_USE_DYNAMIC_LIBRARIES */
234