xref: /petsc/src/sys/classes/viewer/interface/dlregispetsc.c (revision 21e3ffae2f3b73c0bd738cf6d0a809700fc04bb0)
1 
2 #include <petscdraw.h>
3 #include <petscviewer.h>
4 #include <petsc/private/viewerimpl.h>
5 
6 static PetscBool PetscSysPackageInitialized = PETSC_FALSE;
7 
8 /*@C
9   PetscSysFinalizePackage - This function destroys everything in the PETSc created internally in the system library portion of PETSc.
10   It is called from `PetscFinalize()`.
11 
12   Level: developer
13 
14 .seealso: `PetscFinalize()`
15 @*/
16 PetscErrorCode PetscSysFinalizePackage(void)
17 {
18   PetscFunctionBegin;
19   if (Petsc_Seq_keyval != MPI_KEYVAL_INVALID) PetscCallMPI(MPI_Comm_free_keyval(&Petsc_Seq_keyval));
20   PetscSysPackageInitialized = PETSC_FALSE;
21   PetscFunctionReturn(PETSC_SUCCESS);
22 }
23 
24 /*@C
25   PetscSysInitializePackage - This function initializes everything in the main Petsc package. It is called
26   from PetscDLLibraryRegister_petsc() when using dynamic libraries, and on the call to `PetscInitialize()`
27   when using shared or static libraries.
28 
29   Level: developer
30 
31 .seealso: `PetscInitialize()`
32 @*/
33 PetscErrorCode PetscSysInitializePackage(void)
34 {
35   char      logList[256];
36   PetscBool opt, pkg;
37 
38   PetscFunctionBegin;
39   if (PetscSysPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
40   PetscSysPackageInitialized = PETSC_TRUE;
41   /* Register Classes */
42   PetscCall(PetscClassIdRegister("Object", &PETSC_OBJECT_CLASSID));
43   PetscCall(PetscClassIdRegister("Container", &PETSC_CONTAINER_CLASSID));
44 
45   /* Register Events */
46   PetscCall(PetscLogEventRegister("PetscBarrier", PETSC_SMALLEST_CLASSID, &PETSC_Barrier));
47   PetscCall(PetscLogEventRegister("BuildTwoSided", PETSC_SMALLEST_CLASSID, &PETSC_BuildTwoSided));
48   PetscCall(PetscLogEventRegister("BuildTwoSidedF", PETSC_SMALLEST_CLASSID, &PETSC_BuildTwoSidedF));
49   /* Process Info */
50   {
51     PetscClassId classids[1];
52 
53     classids[0] = PETSC_SMALLEST_CLASSID;
54     PetscCall(PetscInfoProcessClass("sys", 1, classids));
55   }
56   /* Process summary exclusions */
57   PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
58   if (opt) {
59     PetscCall(PetscStrInList("null", logList, ',', &pkg));
60     if (pkg) PetscCall(PetscLogEventExcludeClass(PETSC_SMALLEST_CLASSID));
61   }
62   PetscCall(PetscRegisterFinalize(PetscSysFinalizePackage));
63   PetscFunctionReturn(PETSC_SUCCESS);
64 }
65 
66 #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
67 
68   #if defined(PETSC_USE_SINGLE_LIBRARY)
69 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscvec(void);
70 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscmat(void);
71 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void);
72 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscksp(void);
73 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscsnes(void);
74 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscts(void);
75   #endif
76 
77   /*
78   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
79 
80   This one registers all the system level objects.
81 
82  */
83   #if defined(PETSC_USE_SINGLE_LIBRARY)
84 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petsc(void)
85   #else
86 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscsys(void)
87   #endif
88 {
89   PetscFunctionBegin;
90   /*
91       If we got here then PETSc was properly loaded
92   */
93   PetscCall(PetscSysInitializePackage());
94   PetscCall(PetscDrawInitializePackage());
95   PetscCall(PetscViewerInitializePackage());
96   PetscCall(PetscRandomInitializePackage());
97 
98   #if defined(PETSC_USE_SINGLE_LIBRARY)
99   PetscCall(PetscDLLibraryRegister_petscvec());
100   PetscCall(PetscDLLibraryRegister_petscmat());
101   PetscCall(PetscDLLibraryRegister_petscdm());
102   PetscCall(PetscDLLibraryRegister_petscksp());
103   PetscCall(PetscDLLibraryRegister_petscsnes());
104   PetscCall(PetscDLLibraryRegister_petscts());
105   #endif
106   PetscFunctionReturn(PETSC_SUCCESS);
107 }
108 #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
109