xref: /petsc/src/dm/interface/dlregisdmdm.c (revision 6dbbd3060fde0bb4b0dff80567db5704b5e5a680)
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(&PetscFVList);CHKERRQ(ierr);
199   PetscFVPackageInitialized = PETSC_FALSE;
200   PetscFVRegisterAllCalled  = PETSC_FALSE;
201   PetscFunctionReturn(0);
202 }
203 
204 #undef __FUNCT__
205 #define __FUNCT__ "PetscFVInitializePackage"
206 /*@C
207   PetscFVInitializePackage - This function initializes everything in the FV package. It is called
208   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscFVCreate()
209   when using static libraries.
210 
211   Level: developer
212 
213 .keywords: PetscFV, initialize, package
214 .seealso: PetscInitialize()
215 @*/
216 PetscErrorCode PetscFVInitializePackage(void)
217 {
218   char           logList[256];
219   char          *className;
220   PetscBool      opt;
221   PetscErrorCode ierr;
222 
223   PetscFunctionBegin;
224   if (PetscFVPackageInitialized) PetscFunctionReturn(0);
225   PetscFVPackageInitialized = PETSC_TRUE;
226 
227   /* Register Classes */
228   ierr = PetscClassIdRegister("FV Space", &PETSCFV_CLASSID);CHKERRQ(ierr);
229 
230   /* Register Constructors */
231   ierr = PetscFVRegisterAll();CHKERRQ(ierr);
232   /* Register Events */
233   /* Process info exclusions */
234   ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr);
235   if (opt) {
236     ierr = PetscStrstr(logList, "fv", &className);CHKERRQ(ierr);
237     if (className) {ierr = PetscInfoDeactivateClass(PETSCFV_CLASSID);CHKERRQ(ierr);}
238   }
239   /* Process summary exclusions */
240   ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr);
241   if (opt) {
242     ierr = PetscStrstr(logList, "fv", &className);CHKERRQ(ierr);
243     if (className) {ierr = PetscLogEventDeactivateClass(PETSCFV_CLASSID);CHKERRQ(ierr);}
244   }
245   ierr = PetscRegisterFinalize(PetscFVFinalizePackage);CHKERRQ(ierr);
246   PetscFunctionReturn(0);
247 }
248 
249 #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
250 #undef __FUNCT__
251 #define __FUNCT__ "PetscDLLibraryRegister_petscdm"
252 /*
253   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
254 
255   This one registers all the mesh generators and partitioners that are in
256   the basic DM library.
257 
258 */
259 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void)
260 {
261   PetscErrorCode ierr;
262 
263   PetscFunctionBegin;
264   ierr = AOInitializePackage();CHKERRQ(ierr);
265   ierr = DMInitializePackage();CHKERRQ(ierr);
266   ierr = PetscFEInitializePackage();CHKERRQ(ierr);
267   PetscFunctionReturn(0);
268 }
269 
270 #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
271