xref: /petsc/src/dm/interface/dlregisdmdm.c (revision 8117f98bdb9203d359c47c31e74f4d815edd4bf0)
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   ierr = PetscFunctionListDestroy(&PetscFEList);CHKERRQ(ierr);
157   PetscFEPackageInitialized       = PETSC_FALSE;
158   PetscSpaceRegisterAllCalled     = PETSC_FALSE;
159   PetscDualSpaceRegisterAllCalled = PETSC_FALSE;
160   PetscFERegisterAllCalled        = PETSC_FALSE;
161   PetscFunctionReturn(0);
162 }
163 
164 #undef __FUNCT__
165 #define __FUNCT__ "PetscFEInitializePackage"
166 /*@C
167   PetscFEInitializePackage - This function initializes everything in the FE package. It is called
168   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscSpaceCreate()
169   when using static libraries.
170 
171   Level: developer
172 
173 .keywords: PetscFE, initialize, package
174 .seealso: PetscInitialize()
175 @*/
176 PetscErrorCode PetscFEInitializePackage(void)
177 {
178   char           logList[256];
179   char          *className;
180   PetscBool      opt;
181   PetscErrorCode ierr;
182 
183   PetscFunctionBegin;
184   if (PetscFEPackageInitialized) PetscFunctionReturn(0);
185   PetscFEPackageInitialized = PETSC_TRUE;
186 
187   /* Register Classes */
188   ierr = PetscClassIdRegister("Linear Space", &PETSCSPACE_CLASSID);CHKERRQ(ierr);
189   ierr = PetscClassIdRegister("Dual Space",   &PETSCDUALSPACE_CLASSID);CHKERRQ(ierr);
190   ierr = PetscClassIdRegister("FE Space",     &PETSCFE_CLASSID);CHKERRQ(ierr);
191 
192   /* Register Constructors */
193   ierr = PetscSpaceRegisterAll();CHKERRQ(ierr);
194   ierr = PetscDualSpaceRegisterAll();CHKERRQ(ierr);
195   ierr = PetscFERegisterAll();CHKERRQ(ierr);
196   /* Register Events */
197   /* Process info exclusions */
198   ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr);
199   if (opt) {
200     ierr = PetscStrstr(logList, "fe", &className);CHKERRQ(ierr);
201     if (className) {
202       ierr = PetscInfoDeactivateClass(PETSCFE_CLASSID);CHKERRQ(ierr);
203     }
204   }
205   /* Process summary exclusions */
206   ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr);
207   if (opt) {
208     ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr);
209     if (className) {
210       ierr = PetscLogEventDeactivateClass(DM_CLASSID);CHKERRQ(ierr);
211     }
212   }
213   ierr = PetscRegisterFinalize(PetscFEFinalizePackage);CHKERRQ(ierr);
214   PetscFunctionReturn(0);
215 }
216 
217 #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
218 #undef __FUNCT__
219 #define __FUNCT__ "PetscDLLibraryRegister_petscdm"
220 /*
221   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
222 
223   This one registers all the mesh generators and partitioners that are in
224   the basic DM library.
225 
226 */
227 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void)
228 {
229   PetscErrorCode ierr;
230 
231   PetscFunctionBegin;
232   ierr = AOInitializePackage();CHKERRQ(ierr);
233   ierr = DMInitializePackage();CHKERRQ(ierr);
234   ierr = PetscFEInitializePackage();CHKERRQ(ierr);
235   PetscFunctionReturn(0);
236 }
237 
238 #endif /* PETSC_USE_DYNAMIC_LIBRARIES */
239