xref: /petsc/src/dm/interface/dlregisdmdm.c (revision fb8e56e08d4d0bfe9fc63603ca1f7fddd68abbdb)
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 #if defined(PETSC_HAVE_SIEVE)
84   ierr = PetscLogEventRegister("DMMeshView",             DM_CLASSID,&DMMesh_View);CHKERRQ(ierr);
85   ierr = PetscLogEventRegister("DMMeshGetGlobalScatter", DM_CLASSID,&DMMesh_GetGlobalScatter);CHKERRQ(ierr);
86   ierr = PetscLogEventRegister("DMMeshRestrictVector",   DM_CLASSID,&DMMesh_restrictVector);CHKERRQ(ierr);
87   ierr = PetscLogEventRegister("DMMeshAssembleVector",   DM_CLASSID,&DMMesh_assembleVector);CHKERRQ(ierr);
88   ierr = PetscLogEventRegister("DMMeshAssemVecComplete", DM_CLASSID,&DMMesh_assembleVectorComplete);CHKERRQ(ierr);
89   ierr = PetscLogEventRegister("DMMeshAssembleMatrix",   DM_CLASSID,&DMMesh_assembleMatrix);CHKERRQ(ierr);
90   ierr = PetscLogEventRegister("DMMeshUpdateOperator",   DM_CLASSID,&DMMesh_updateOperator);CHKERRQ(ierr);
91   ierr = PetscLogEventRegister("SectionRealView",        SECTIONREAL_CLASSID,&SectionReal_View);CHKERRQ(ierr);
92   ierr = PetscLogEventRegister("SectionIntView",         SECTIONINT_CLASSID,&SectionInt_View);CHKERRQ(ierr);
93 #endif
94   /* Process info exclusions */
95   ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr);
96   if (opt) {
97     ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr);
98     if (className) {
99       ierr = PetscInfoDeactivateClass(DM_CLASSID);CHKERRQ(ierr);
100     }
101 #if defined(PETSC_HAVE_SIEVE)
102     ierr = PetscStrstr(logList, "sectionreal", &className);CHKERRQ(ierr);
103     if (className) {
104       ierr = PetscInfoDeactivateClass(SECTIONREAL_CLASSID);CHKERRQ(ierr);
105     }
106     ierr = PetscStrstr(logList, "sectionint", &className);CHKERRQ(ierr);
107     if (className) {
108       ierr = PetscInfoDeactivateClass(SECTIONINT_CLASSID);CHKERRQ(ierr);
109     }
110 #endif
111   }
112   /* Process summary exclusions */
113   ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr);
114   if (opt) {
115     ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr);
116     if (className) {
117       ierr = PetscLogEventDeactivateClass(DM_CLASSID);CHKERRQ(ierr);
118     }
119 #if defined(PETSC_HAVE_SIEVE)
120     ierr = PetscStrstr(logList, "sectionreal", &className);CHKERRQ(ierr);
121     if (className) {
122       ierr = PetscLogEventDeactivateClass(SECTIONREAL_CLASSID);CHKERRQ(ierr);
123     }
124     ierr = PetscStrstr(logList, "sectionint", &className);CHKERRQ(ierr);
125     if (className) {
126       ierr = PetscLogEventDeactivateClass(SECTIONINT_CLASSID);CHKERRQ(ierr);
127     }
128 #endif
129   }
130   ierr = PetscRegisterFinalize(DMFinalizePackage);CHKERRQ(ierr);
131   PetscFunctionReturn(0);
132 }
133 
134 
135 
136 #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
137 #undef __FUNCT__
138 #define __FUNCT__ "PetscDLLibraryRegister_petscdm"
139 /*
140   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
141 
142   This one registers all the mesh generators and partitioners that are in
143   the basic DM library.
144 
145 */
146 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void)
147 {
148   PetscErrorCode ierr;
149 
150   PetscFunctionBegin;
151   ierr = AOInitializePackage();CHKERRQ(ierr);
152   ierr = DMInitializePackage();CHKERRQ(ierr);
153   PetscFunctionReturn(0);
154 }
155 
156 #endif /* PETSC_USE_DYNAMIC_LIBRARIES */
157