xref: /petsc/src/dm/interface/dlregisdmdm.c (revision dcca6d9d80ebd869fe6029bd05a3aa9faafef49e)
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) {
169       ierr = PetscInfoDeactivateClass(PETSCFE_CLASSID);CHKERRQ(ierr);
170     }
171   }
172   /* Process summary exclusions */
173   ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr);
174   if (opt) {
175     ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr);
176     if (className) {
177       ierr = PetscLogEventDeactivateClass(DM_CLASSID);CHKERRQ(ierr);
178     }
179   }
180   ierr = PetscRegisterFinalize(PetscFEFinalizePackage);CHKERRQ(ierr);
181   PetscFunctionReturn(0);
182 }
183 
184 #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
185 #undef __FUNCT__
186 #define __FUNCT__ "PetscDLLibraryRegister_petscdm"
187 /*
188   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
189 
190   This one registers all the mesh generators and partitioners that are in
191   the basic DM library.
192 
193 */
194 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void)
195 {
196   PetscErrorCode ierr;
197 
198   PetscFunctionBegin;
199   ierr = AOInitializePackage();CHKERRQ(ierr);
200   ierr = DMInitializePackage();CHKERRQ(ierr);
201   ierr = PetscFEInitializePackage();CHKERRQ(ierr);
202   PetscFunctionReturn(0);
203 }
204 
205 #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
206