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