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