Actual source code: dlregisdmdm.c
petsc-3.4.5 2014-06-29
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
8: static PetscBool DMPackageInitialized = PETSC_FALSE;
11: /*@C
12: DMFinalizePackage - This function finalizes everything in the DM package. It is called
13: from PetscFinalize().
15: Level: developer
17: .keywords: AO, initialize, package
18: .seealso: PetscInitialize()
19: @*/
20: PetscErrorCode DMFinalizePackage(void)
21: {
25: PetscFunctionListDestroy(&DMList);
26: DMPackageInitialized = PETSC_FALSE;
27: DMRegisterAllCalled = PETSC_FALSE;
28: #if defined(PETSC_HAVE_SIEVE)
29: DMMeshFinalize();
30: #endif
31: return(0);
32: }
34: #if defined(PETSC_HAVE_HYPRE)
35: PETSC_EXTERN PetscErrorCode MatCreate_HYPREStruct(Mat);
36: #endif
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.
45: Level: developer
47: .keywords: AO, initialize, package
48: .seealso: PetscInitialize()
49: @*/
50: PetscErrorCode DMInitializePackage(void)
51: {
52: char logList[256];
53: char *className;
54: PetscBool opt;
58: if (DMPackageInitialized) return(0);
59: DMPackageInitialized = PETSC_TRUE;
61: /* Register Classes */
62: PetscClassIdRegister("Distributed Mesh",&DM_CLASSID);
63: #if defined(PETSC_HAVE_SIEVE)
64: PetscClassIdRegister("SectionReal",&SECTIONREAL_CLASSID);
65: PetscClassIdRegister("SectionInt",&SECTIONINT_CLASSID);
66: #endif
68: #if defined(PETSC_HAVE_HYPRE)
69: MatRegister(MATHYPRESTRUCT, MatCreate_HYPREStruct);
70: #endif
72: /* Register Constructors */
73: DMRegisterAll();
74: /* Register Events */
75: PetscLogEventRegister("DMConvert", DM_CLASSID,&DM_Convert);
76: PetscLogEventRegister("DMGlobalToLocal", DM_CLASSID,&DM_GlobalToLocal);
77: PetscLogEventRegister("DMLocalToGlobal", DM_CLASSID,&DM_LocalToGlobal);
79: PetscLogEventRegister("DMDALocalADFunc", DM_CLASSID,&DMDA_LocalADFunction);
81: PetscLogEventRegister("DMPlexDistribute", DM_CLASSID,&DMPLEX_Distribute);
82: PetscLogEventRegister("DMPlexStratify", DM_CLASSID,&DMPLEX_Stratify);
83: #if defined(PETSC_HAVE_SIEVE)
84: PetscLogEventRegister("DMMeshView", DM_CLASSID,&DMMesh_View);
85: PetscLogEventRegister("DMMeshGetGlobalScatter", DM_CLASSID,&DMMesh_GetGlobalScatter);
86: PetscLogEventRegister("DMMeshRestrictVector", DM_CLASSID,&DMMesh_restrictVector);
87: PetscLogEventRegister("DMMeshAssembleVector", DM_CLASSID,&DMMesh_assembleVector);
88: PetscLogEventRegister("DMMeshAssemVecComplete", DM_CLASSID,&DMMesh_assembleVectorComplete);
89: PetscLogEventRegister("DMMeshAssembleMatrix", DM_CLASSID,&DMMesh_assembleMatrix);
90: PetscLogEventRegister("DMMeshUpdateOperator", DM_CLASSID,&DMMesh_updateOperator);
91: PetscLogEventRegister("SectionRealView", SECTIONREAL_CLASSID,&SectionReal_View);
92: PetscLogEventRegister("SectionIntView", SECTIONINT_CLASSID,&SectionInt_View);
93: #endif
94: /* Process info exclusions */
95: PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);
96: if (opt) {
97: PetscStrstr(logList, "da", &className);
98: if (className) {
99: PetscInfoDeactivateClass(DM_CLASSID);
100: }
101: #if defined(PETSC_HAVE_SIEVE)
102: PetscStrstr(logList, "sectionreal", &className);
103: if (className) {
104: PetscInfoDeactivateClass(SECTIONREAL_CLASSID);
105: }
106: PetscStrstr(logList, "sectionint", &className);
107: if (className) {
108: PetscInfoDeactivateClass(SECTIONINT_CLASSID);
109: }
110: #endif
111: }
112: /* Process summary exclusions */
113: PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);
114: if (opt) {
115: PetscStrstr(logList, "da", &className);
116: if (className) {
117: PetscLogEventDeactivateClass(DM_CLASSID);
118: }
119: #if defined(PETSC_HAVE_SIEVE)
120: PetscStrstr(logList, "sectionreal", &className);
121: if (className) {
122: PetscLogEventDeactivateClass(SECTIONREAL_CLASSID);
123: }
124: PetscStrstr(logList, "sectionint", &className);
125: if (className) {
126: PetscLogEventDeactivateClass(SECTIONINT_CLASSID);
127: }
128: #endif
129: }
130: PetscRegisterFinalize(DMFinalizePackage);
131: return(0);
132: }
136: #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
139: /*
140: PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
142: This one registers all the mesh generators and partitioners that are in
143: the basic DM library.
145: */
146: PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void)
147: {
151: AOInitializePackage();
152: DMInitializePackage();
153: return(0);
154: }
156: #endif /* PETSC_USE_DYNAMIC_LIBRARIES */