Actual source code: dlregispetsc.c
2: #include <petscdraw.h>
3: #include <petscviewer.h>
4: #include <petsc/private/viewerimpl.h>
6: static PetscBool PetscSysPackageInitialized = PETSC_FALSE;
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().
12: Level: developer
14: .seealso: PetscFinalize()
15: @*/
16: PetscErrorCode PetscSysFinalizePackage(void)
17: {
18: if (Petsc_Seq_keyval != MPI_KEYVAL_INVALID) {
19: MPI_Comm_free_keyval(&Petsc_Seq_keyval);
20: }
21: PetscSysPackageInitialized = PETSC_FALSE;
22: return 0;
23: }
25: /*@C
26: PetscSysInitializePackage - This function initializes everything in the main Petsc package. It is called
27: from PetscDLLibraryRegister_petsc() when using dynamic libraries, and on the call to PetscInitialize()
28: when using shared or static libraries.
30: Level: developer
32: .seealso: PetscInitialize()
33: @*/
34: PetscErrorCode PetscSysInitializePackage(void)
35: {
36: char logList[256];
37: PetscBool opt,pkg;
39: if (PetscSysPackageInitialized) return 0;
40: PetscSysPackageInitialized = PETSC_TRUE;
41: /* Register Classes */
42: PetscClassIdRegister("Object",&PETSC_OBJECT_CLASSID);
43: PetscClassIdRegister("Container",&PETSC_CONTAINER_CLASSID);
45: /* Register Events */
46: PetscLogEventRegister("PetscBarrier", PETSC_SMALLEST_CLASSID,&PETSC_Barrier);
47: PetscLogEventRegister("BuildTwoSided",PETSC_SMALLEST_CLASSID,&PETSC_BuildTwoSided);
48: PetscLogEventRegister("BuildTwoSidedF",PETSC_SMALLEST_CLASSID,&PETSC_BuildTwoSidedF);
49: /* Process Info */
50: {
51: PetscClassId classids[1];
53: classids[0] = PETSC_SMALLEST_CLASSID;
54: PetscInfoProcessClass("sys", 1, classids);
55: }
56: /* Process summary exclusions */
57: PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);
58: if (opt) {
59: PetscStrInList("null",logList,',',&pkg);
60: if (pkg) PetscLogEventExcludeClass(PETSC_SMALLEST_CLASSID);
61: }
62: PetscRegisterFinalize(PetscSysFinalizePackage);
63: return 0;
64: }
66: #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
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
77: /*
78: PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
80: This one registers all the system level objects.
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: /*
90: If we got here then PETSc was properly loaded
91: */
92: PetscSysInitializePackage();
93: PetscDrawInitializePackage();
94: PetscViewerInitializePackage();
95: PetscRandomInitializePackage();
97: #if defined(PETSC_USE_SINGLE_LIBRARY)
98: PetscDLLibraryRegister_petscvec();
99: PetscDLLibraryRegister_petscmat();
100: PetscDLLibraryRegister_petscdm();
101: PetscDLLibraryRegister_petscksp();
102: PetscDLLibraryRegister_petscsnes();
103: PetscDLLibraryRegister_petscts();
104: #endif
105: return 0;
106: }
107: #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */