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