xref: /petsc/src/dm/interface/dlregisdmdm.c (revision 04ceabe58f405c9c61ed143bd35439acf3495110)
1 
2 #include <petsc-private/dmdaimpl.h>
3 #include <petsc-private/dmpleximpl.h>
4 
5 static PetscBool DMPackageInitialized = PETSC_FALSE;
6 #undef __FUNCT__
7 #define __FUNCT__ "DMFinalizePackage"
8 /*@C
9   DMFinalizePackage - This function finalizes everything in the DM package. It is called
10   from PetscFinalize().
11 
12   Level: developer
13 
14 .keywords: AO, initialize, package
15 .seealso: PetscInitialize()
16 @*/
17 PetscErrorCode  DMFinalizePackage(void)
18 {
19   PetscErrorCode ierr;
20 
21   PetscFunctionBegin;
22   ierr = PetscFunctionListDestroy(&DMList);CHKERRQ(ierr);
23   DMPackageInitialized = PETSC_FALSE;
24   DMRegisterAllCalled  = PETSC_FALSE;
25   PetscFunctionReturn(0);
26 }
27 
28 #if defined(PETSC_HAVE_HYPRE)
29 PETSC_EXTERN PetscErrorCode MatCreate_HYPREStruct(Mat);
30 #endif
31 
32 #undef __FUNCT__
33 #define __FUNCT__ "DMInitializePackage"
34 /*@C
35   DMInitializePackage - This function initializes everything in the DM package. It is called
36   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to AOCreate()
37   or DMDACreate() when using static libraries.
38 
39   Level: developer
40 
41 .keywords: AO, initialize, package
42 .seealso: PetscInitialize()
43 @*/
44 PetscErrorCode  DMInitializePackage(void)
45 {
46   char           logList[256];
47   char           *className;
48   PetscBool      opt;
49   PetscErrorCode ierr;
50 
51   PetscFunctionBegin;
52   if (DMPackageInitialized) PetscFunctionReturn(0);
53   DMPackageInitialized = PETSC_TRUE;
54 
55   /* Register Classes */
56   ierr = PetscClassIdRegister("Distributed Mesh",&DM_CLASSID);CHKERRQ(ierr);
57 
58 #if defined(PETSC_HAVE_HYPRE)
59   ierr = MatRegister(MATHYPRESTRUCT, MatCreate_HYPREStruct);CHKERRQ(ierr);
60 #endif
61 
62   /* Register Constructors */
63   ierr = DMRegisterAll();CHKERRQ(ierr);
64   /* Register Events */
65   ierr = PetscLogEventRegister("DMConvert",              DM_CLASSID,&DM_Convert);CHKERRQ(ierr);
66   ierr = PetscLogEventRegister("DMGlobalToLocal",        DM_CLASSID,&DM_GlobalToLocal);CHKERRQ(ierr);
67   ierr = PetscLogEventRegister("DMLocalToGlobal",        DM_CLASSID,&DM_LocalToGlobal);CHKERRQ(ierr);
68 
69   ierr = PetscLogEventRegister("DMDALocalADFunc",        DM_CLASSID,&DMDA_LocalADFunction);CHKERRQ(ierr);
70 
71   ierr = PetscLogEventRegister("DMPlexDistribute",    DM_CLASSID,&DMPLEX_Distribute);CHKERRQ(ierr);
72   ierr = PetscLogEventRegister("DMPlexStratify",      DM_CLASSID,&DMPLEX_Stratify);CHKERRQ(ierr);
73   /* Process info exclusions */
74   ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr);
75   if (opt) {
76     ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr);
77     if (className) {
78       ierr = PetscInfoDeactivateClass(DM_CLASSID);CHKERRQ(ierr);
79     }
80   }
81   /* Process summary exclusions */
82   ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr);
83   if (opt) {
84     ierr = PetscStrstr(logList, "da", &className);CHKERRQ(ierr);
85     if (className) {
86       ierr = PetscLogEventDeactivateClass(DM_CLASSID);CHKERRQ(ierr);
87     }
88   }
89   ierr = PetscRegisterFinalize(DMFinalizePackage);CHKERRQ(ierr);
90   PetscFunctionReturn(0);
91 }
92 
93 
94 
95 #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
96 #undef __FUNCT__
97 #define __FUNCT__ "PetscDLLibraryRegister_petscdm"
98 /*
99   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
100 
101   This one registers all the mesh generators and partitioners that are in
102   the basic DM library.
103 
104 */
105 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void)
106 {
107   PetscErrorCode ierr;
108 
109   PetscFunctionBegin;
110   ierr = AOInitializePackage();CHKERRQ(ierr);
111   ierr = DMInitializePackage();CHKERRQ(ierr);
112   PetscFunctionReturn(0);
113 }
114 
115 #endif /* PETSC_USE_DYNAMIC_LIBRARIES */
116