xref: /petsc/src/dm/interface/dlregisdmdm.c (revision 6f3c3dcf8ef4015f292691ee124e8c4bddb46dfd)
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 #if defined(PETSC_HAVE_SIEVE)
23   PetscErrorCode ierr;
24 #endif
25 
26   PetscFunctionBegin;
27   DMPackageInitialized = PETSC_FALSE;
28   DMList               = NULL;
29   DMRegisterAllCalled  = PETSC_FALSE;
30 #if defined(PETSC_HAVE_SIEVE)
31   ierr = DMMeshFinalize();CHKERRQ(ierr);
32 #endif
33   PetscFunctionReturn(0);
34 }
35 
36 #if defined(PETSC_HAVE_HYPRE)
37 EXTERN_C_BEGIN
38 extern PetscErrorCode  MatCreate_HYPREStruct(Mat);
39 EXTERN_C_END
40 #endif
41 
42 #undef __FUNCT__
43 #define __FUNCT__ "DMInitializePackage"
44 /*@C
45   DMInitializePackage - This function initializes everything in the DM package. It is called
46   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to AOCreate()
47   or DMDACreate() when using static libraries.
48 
49   Input Parameter:
50   path - The dynamic library path, or NULL
51 
52   Level: developer
53 
54 .keywords: AO, initialize, package
55 .seealso: PetscInitialize()
56 @*/
57 PetscErrorCode  DMInitializePackage(const char path[])
58 {
59   char           logList[256];
60   char           *className;
61   PetscBool      opt;
62   PetscErrorCode ierr;
63 
64   PetscFunctionBegin;
65   if (DMPackageInitialized) PetscFunctionReturn(0);
66   DMPackageInitialized = PETSC_TRUE;
67 
68   /* Register Classes */
69   ierr = PetscClassIdRegister("Distributed Mesh",&DM_CLASSID);CHKERRQ(ierr);
70 #if defined(PETSC_HAVE_SIEVE)
71   ierr = PetscClassIdRegister("SectionReal",&SECTIONREAL_CLASSID);CHKERRQ(ierr);
72   ierr = PetscClassIdRegister("SectionInt",&SECTIONINT_CLASSID);CHKERRQ(ierr);
73 #endif
74 
75 #if defined(PETSC_HAVE_HYPRE)
76   ierr = MatRegisterDynamic(MATHYPRESTRUCT,    path,"MatCreate_HYPREStruct", MatCreate_HYPREStruct);CHKERRQ(ierr);
77 #endif
78 
79   /* Register Constructors */
80   ierr = DMRegisterAll(path);CHKERRQ(ierr);
81   /* Register Events */
82   ierr = PetscLogEventRegister("DMConvert",              DM_CLASSID,&DM_Convert);CHKERRQ(ierr);
83   ierr = PetscLogEventRegister("DMGlobalToLocal",        DM_CLASSID,&DM_GlobalToLocal);CHKERRQ(ierr);
84   ierr = PetscLogEventRegister("DMLocalToGlobal",        DM_CLASSID,&DM_LocalToGlobal);CHKERRQ(ierr);
85 
86   ierr = PetscLogEventRegister("DMDALocalADFunc",        DM_CLASSID,&DMDA_LocalADFunction);CHKERRQ(ierr);
87 
88   ierr = PetscLogEventRegister("DMPlexDistribute",    DM_CLASSID,&DMPLEX_Distribute);CHKERRQ(ierr);
89   ierr = PetscLogEventRegister("DMPlexStratify",      DM_CLASSID,&DMPLEX_Stratify);CHKERRQ(ierr);
90 #if defined(PETSC_HAVE_SIEVE)
91   ierr = PetscLogEventRegister("DMMeshView",             DM_CLASSID,&DMMesh_View);CHKERRQ(ierr);
92   ierr = PetscLogEventRegister("DMMeshGetGlobalScatter", DM_CLASSID,&DMMesh_GetGlobalScatter);CHKERRQ(ierr);
93   ierr = PetscLogEventRegister("DMMeshRestrictVector",   DM_CLASSID,&DMMesh_restrictVector);CHKERRQ(ierr);
94   ierr = PetscLogEventRegister("DMMeshAssembleVector",   DM_CLASSID,&DMMesh_assembleVector);CHKERRQ(ierr);
95   ierr = PetscLogEventRegister("DMMeshAssemVecComplete", DM_CLASSID,&DMMesh_assembleVectorComplete);CHKERRQ(ierr);
96   ierr = PetscLogEventRegister("DMMeshAssembleMatrix",   DM_CLASSID,&DMMesh_assembleMatrix);CHKERRQ(ierr);
97   ierr = PetscLogEventRegister("DMMeshUpdateOperator",   DM_CLASSID,&DMMesh_updateOperator);CHKERRQ(ierr);
98   ierr = PetscLogEventRegister("SectionRealView",        SECTIONREAL_CLASSID,&SectionReal_View);CHKERRQ(ierr);
99   ierr = PetscLogEventRegister("SectionIntView",         SECTIONINT_CLASSID,&SectionInt_View);CHKERRQ(ierr);
100 #endif
101   /* Process info exclusions */
102   ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr);
103   if (opt) {
104     ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr);
105     if (className) {
106       ierr = PetscInfoDeactivateClass(DM_CLASSID);CHKERRQ(ierr);
107     }
108 #if defined(PETSC_HAVE_SIEVE)
109     ierr = PetscStrstr(logList, "sectionreal", &className);CHKERRQ(ierr);
110     if (className) {
111       ierr = PetscInfoDeactivateClass(SECTIONREAL_CLASSID);CHKERRQ(ierr);
112     }
113     ierr = PetscStrstr(logList, "sectionint", &className);CHKERRQ(ierr);
114     if (className) {
115       ierr = PetscInfoDeactivateClass(SECTIONINT_CLASSID);CHKERRQ(ierr);
116     }
117 #endif
118   }
119   /* Process summary exclusions */
120   ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr);
121   if (opt) {
122     ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr);
123     if (className) {
124       ierr = PetscLogEventDeactivateClass(DM_CLASSID);CHKERRQ(ierr);
125     }
126 #if defined(PETSC_HAVE_SIEVE)
127     ierr = PetscStrstr(logList, "sectionreal", &className);CHKERRQ(ierr);
128     if (className) {
129       ierr = PetscLogEventDeactivateClass(SECTIONREAL_CLASSID);CHKERRQ(ierr);
130     }
131     ierr = PetscStrstr(logList, "sectionint", &className);CHKERRQ(ierr);
132     if (className) {
133       ierr = PetscLogEventDeactivateClass(SECTIONINT_CLASSID);CHKERRQ(ierr);
134     }
135 #endif
136   }
137   ierr = PetscRegisterFinalize(DMFinalizePackage);CHKERRQ(ierr);
138   PetscFunctionReturn(0);
139 }
140 
141 
142 
143 #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
144 EXTERN_C_BEGIN
145 #undef __FUNCT__
146 #define __FUNCT__ "PetscDLLibraryRegister_petscdm"
147 /*
148   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
149 
150   This one registers all the mesh generators and partitioners that are in
151   the basic DM library.
152 
153   Input Parameter:
154   path - library path
155 */
156 PetscErrorCode  PetscDLLibraryRegister_petscdm(const char path[])
157 {
158   PetscErrorCode ierr;
159 
160   PetscFunctionBegin;
161   ierr = AOInitializePackage(path);CHKERRQ(ierr);
162   ierr = DMInitializePackage(path);CHKERRQ(ierr);
163   PetscFunctionReturn(0);
164 }
165 EXTERN_C_END
166 
167 #endif /* PETSC_USE_DYNAMIC_LIBRARIES */
168