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