xref: /petsc/src/dm/interface/dlregisdmdm.c (revision 021e0df48735593a4b10a8d433fd5ac359e13c2e)
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) {ierr = PetscInfoDeactivateClass(PETSCFE_CLASSID);CHKERRQ(ierr);}
169   }
170   /* Process summary exclusions */
171   ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr);
172   if (opt) {
173     ierr = PetscStrstr(logList, "fe", &className);CHKERRQ(ierr);
174     if (className) {ierr = PetscLogEventDeactivateClass(PETSCFE_CLASSID);CHKERRQ(ierr);}
175   }
176   ierr = PetscRegisterFinalize(PetscFEFinalizePackage);CHKERRQ(ierr);
177   PetscFunctionReturn(0);
178 }
179 #include <petscfv.h>
180 
181 static PetscBool PetscFVPackageInitialized = PETSC_FALSE;
182 #undef __FUNCT__
183 #define __FUNCT__ "PetscFVFinalizePackage"
184 /*@C
185   PetscFVFinalizePackage - This function finalizes everything in the PetscFV package. It is called
186   from PetscFinalize().
187 
188   Level: developer
189 
190 .keywords: PetscFV, initialize, package
191 .seealso: PetscInitialize()
192 @*/
193 PetscErrorCode PetscFVFinalizePackage(void)
194 {
195   PetscErrorCode ierr;
196 
197   PetscFunctionBegin;
198   ierr = PetscFunctionListDestroy(&PetscLimiterList);CHKERRQ(ierr);
199   ierr = PetscFunctionListDestroy(&PetscFVList);CHKERRQ(ierr);
200   PetscFVPackageInitialized     = PETSC_FALSE;
201   PetscFVRegisterAllCalled      = PETSC_FALSE;
202   PetscLimiterRegisterAllCalled = PETSC_FALSE;
203   PetscFunctionReturn(0);
204 }
205 
206 #undef __FUNCT__
207 #define __FUNCT__ "PetscFVInitializePackage"
208 /*@C
209   PetscFVInitializePackage - This function initializes everything in the FV package. It is called
210   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscFVCreate()
211   when using static libraries.
212 
213   Level: developer
214 
215 .keywords: PetscFV, initialize, package
216 .seealso: PetscInitialize()
217 @*/
218 PetscErrorCode PetscFVInitializePackage(void)
219 {
220   char           logList[256];
221   char          *className;
222   PetscBool      opt;
223   PetscErrorCode ierr;
224 
225   PetscFunctionBegin;
226   if (PetscFVPackageInitialized) PetscFunctionReturn(0);
227   PetscFVPackageInitialized = PETSC_TRUE;
228 
229   /* Register Classes */
230   ierr = PetscClassIdRegister("FV Space", &PETSCFV_CLASSID);CHKERRQ(ierr);
231   ierr = PetscClassIdRegister("Limiter",  &PETSCLIMITER_CLASSID);CHKERRQ(ierr);
232 
233   /* Register Constructors */
234   ierr = PetscFVRegisterAll();CHKERRQ(ierr);
235   /* Register Events */
236   /* Process info exclusions */
237   ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr);
238   if (opt) {
239     ierr = PetscStrstr(logList, "fv", &className);CHKERRQ(ierr);
240     if (className) {ierr = PetscInfoDeactivateClass(PETSCFV_CLASSID);CHKERRQ(ierr);}
241     ierr = PetscStrstr(logList, "limiter", &className);CHKERRQ(ierr);
242     if (className) {ierr = PetscInfoDeactivateClass(PETSCLIMITER_CLASSID);CHKERRQ(ierr);}
243   }
244   /* Process summary exclusions */
245   ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr);
246   if (opt) {
247     ierr = PetscStrstr(logList, "fv", &className);CHKERRQ(ierr);
248     if (className) {ierr = PetscLogEventDeactivateClass(PETSCFV_CLASSID);CHKERRQ(ierr);}
249     ierr = PetscStrstr(logList, "limiter", &className);CHKERRQ(ierr);
250     if (className) {ierr = PetscLogEventDeactivateClass(PETSCLIMITER_CLASSID);CHKERRQ(ierr);}
251   }
252   ierr = PetscRegisterFinalize(PetscFVFinalizePackage);CHKERRQ(ierr);
253   PetscFunctionReturn(0);
254 }
255 
256 #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
257 #undef __FUNCT__
258 #define __FUNCT__ "PetscDLLibraryRegister_petscdm"
259 /*
260   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
261 
262   This one registers all the mesh generators and partitioners that are in
263   the basic DM library.
264 
265 */
266 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void)
267 {
268   PetscErrorCode ierr;
269 
270   PetscFunctionBegin;
271   ierr = AOInitializePackage();CHKERRQ(ierr);
272   ierr = DMInitializePackage();CHKERRQ(ierr);
273   ierr = PetscFEInitializePackage();CHKERRQ(ierr);
274   ierr = PetscFVInitializePackage();CHKERRQ(ierr);
275   PetscFunctionReturn(0);
276 }
277 
278 #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
279