xref: /petsc/src/dm/interface/dlregisdmdm.c (revision 8a1af44da4882b8d0246f6cd95069f95e8fe7aba)
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 PETSC_EXTERN PetscErrorCode MatCreate_HYPREStruct(Mat);
38 #endif
39 
40 #undef __FUNCT__
41 #define __FUNCT__ "DMInitializePackage"
42 /*@C
43   DMInitializePackage - This function initializes everything in the DM package. It is called
44   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to AOCreate()
45   or DMDACreate() when using static libraries.
46 
47   Level: developer
48 
49 .keywords: AO, initialize, package
50 .seealso: PetscInitialize()
51 @*/
52 PetscErrorCode  DMInitializePackage(void)
53 {
54   char           logList[256];
55   char           *className;
56   PetscBool      opt;
57   PetscErrorCode ierr;
58 
59   PetscFunctionBegin;
60   if (DMPackageInitialized) PetscFunctionReturn(0);
61   DMPackageInitialized = PETSC_TRUE;
62 
63   /* Register Classes */
64   ierr = PetscClassIdRegister("Distributed Mesh",&DM_CLASSID);CHKERRQ(ierr);
65 #if defined(PETSC_HAVE_SIEVE)
66   ierr = PetscClassIdRegister("SectionReal",&SECTIONREAL_CLASSID);CHKERRQ(ierr);
67   ierr = PetscClassIdRegister("SectionInt",&SECTIONINT_CLASSID);CHKERRQ(ierr);
68 #endif
69 
70 #if defined(PETSC_HAVE_HYPRE)
71   ierr = MatRegister(MATHYPRESTRUCT, MatCreate_HYPREStruct);CHKERRQ(ierr);
72 #endif
73 
74   /* Register Constructors */
75   ierr = DMRegisterAll();CHKERRQ(ierr);
76   /* Register Events */
77   ierr = PetscLogEventRegister("DMConvert",              DM_CLASSID,&DM_Convert);CHKERRQ(ierr);
78   ierr = PetscLogEventRegister("DMGlobalToLocal",        DM_CLASSID,&DM_GlobalToLocal);CHKERRQ(ierr);
79   ierr = PetscLogEventRegister("DMLocalToGlobal",        DM_CLASSID,&DM_LocalToGlobal);CHKERRQ(ierr);
80 
81   ierr = PetscLogEventRegister("DMDALocalADFunc",        DM_CLASSID,&DMDA_LocalADFunction);CHKERRQ(ierr);
82 
83   ierr = PetscLogEventRegister("DMPlexDistribute",    DM_CLASSID,&DMPLEX_Distribute);CHKERRQ(ierr);
84   ierr = PetscLogEventRegister("DMPlexStratify",      DM_CLASSID,&DMPLEX_Stratify);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 
136 
137 
138 #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
139 #undef __FUNCT__
140 #define __FUNCT__ "PetscDLLibraryRegister_petscdm"
141 /*
142   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
143 
144   This one registers all the mesh generators and partitioners that are in
145   the basic DM library.
146 
147 */
148 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void)
149 {
150   PetscErrorCode ierr;
151 
152   PetscFunctionBegin;
153   ierr = AOInitializePackage();CHKERRQ(ierr);
154   ierr = DMInitializePackage();CHKERRQ(ierr);
155   PetscFunctionReturn(0);
156 }
157 
158 #endif /* PETSC_USE_DYNAMIC_LIBRARIES */
159