15c6c1daeSBarry Smith #include <petscdraw.h>
22c1a2d08SJed Brown #include <petscviewer.h>
3974a8051SSatish Balay #include <petsc/private/viewerimpl.h>
45c6c1daeSBarry Smith
55c6c1daeSBarry Smith static PetscBool PetscSysPackageInitialized = PETSC_FALSE;
6d4c7638eSBarry Smith
75c6c1daeSBarry Smith /*@C
8c410d8ccSBarry Smith PetscSysFinalizePackage - This function destroys everything in the system library portion of PETSc.
9811af0c4SBarry Smith It is called from `PetscFinalize()`.
105c6c1daeSBarry Smith
115c6c1daeSBarry Smith Level: developer
125c6c1daeSBarry Smith
133f423023SBarry Smith .seealso: `PetscSysInitializePackage()`, `PetscFinalize()`
145c6c1daeSBarry Smith @*/
PetscSysFinalizePackage(void)15d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscSysFinalizePackage(void)
16d71ae5a4SJacob Faibussowitsch {
175c6c1daeSBarry Smith PetscFunctionBegin;
1848a46eb9SPierre Jolivet if (Petsc_Seq_keyval != MPI_KEYVAL_INVALID) PetscCallMPI(MPI_Comm_free_keyval(&Petsc_Seq_keyval));
195c6c1daeSBarry Smith PetscSysPackageInitialized = PETSC_FALSE;
203ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
215c6c1daeSBarry Smith }
225c6c1daeSBarry Smith
235c6c1daeSBarry Smith /*@C
24c410d8ccSBarry Smith PetscSysInitializePackage - This function initializes everything in the system library portion of PETSc. It is called
25c410d8ccSBarry Smith from `PetscDLLibraryRegister_petsc()` when using dynamic libraries, and in the call to `PetscInitialize()`
268a690491SBarry Smith when using shared or static libraries.
275c6c1daeSBarry Smith
285c6c1daeSBarry Smith Level: developer
295c6c1daeSBarry Smith
30*0b4b7b1cSBarry Smith Note:
31*0b4b7b1cSBarry Smith This function never needs to be called by PETSc users.
32*0b4b7b1cSBarry Smith
333f423023SBarry Smith .seealso: `PetscSysFinalizePackage()`, `PetscInitialize()`
345c6c1daeSBarry Smith @*/
PetscSysInitializePackage(void)35d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscSysInitializePackage(void)
36d71ae5a4SJacob Faibussowitsch {
375c6c1daeSBarry Smith char logList[256];
388e81d068SLisandro Dalcin PetscBool opt, pkg;
395c6c1daeSBarry Smith
405c6c1daeSBarry Smith PetscFunctionBegin;
413ba16761SJacob Faibussowitsch if (PetscSysPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
425c6c1daeSBarry Smith PetscSysPackageInitialized = PETSC_TRUE;
435c6c1daeSBarry Smith /* Register Classes */
449566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("Object", &PETSC_OBJECT_CLASSID));
459566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("Container", &PETSC_CONTAINER_CLASSID));
465c6c1daeSBarry Smith
475c6c1daeSBarry Smith /* Register Events */
489566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("PetscBarrier", PETSC_SMALLEST_CLASSID, &PETSC_Barrier));
499566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("BuildTwoSided", PETSC_SMALLEST_CLASSID, &PETSC_BuildTwoSided));
509566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("BuildTwoSidedF", PETSC_SMALLEST_CLASSID, &PETSC_BuildTwoSidedF));
51e94e781bSJacob Faibussowitsch /* Process Info */
52e94e781bSJacob Faibussowitsch {
53e94e781bSJacob Faibussowitsch PetscClassId classids[1];
54e94e781bSJacob Faibussowitsch
55e94e781bSJacob Faibussowitsch classids[0] = PETSC_SMALLEST_CLASSID;
569566063dSJacob Faibussowitsch PetscCall(PetscInfoProcessClass("sys", 1, classids));
575c6c1daeSBarry Smith }
585c6c1daeSBarry Smith /* Process summary exclusions */
599566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
605c6c1daeSBarry Smith if (opt) {
619566063dSJacob Faibussowitsch PetscCall(PetscStrInList("null", logList, ',', &pkg));
629566063dSJacob Faibussowitsch if (pkg) PetscCall(PetscLogEventExcludeClass(PETSC_SMALLEST_CLASSID));
635c6c1daeSBarry Smith }
649566063dSJacob Faibussowitsch PetscCall(PetscRegisterFinalize(PetscSysFinalizePackage));
653ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
665c6c1daeSBarry Smith }
675c6c1daeSBarry Smith
68aa2d57e9SJed Brown #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
695c6c1daeSBarry Smith
705c6c1daeSBarry Smith #if defined(PETSC_USE_SINGLE_LIBRARY)
71607a6623SBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscvec(void);
72607a6623SBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscmat(void);
73607a6623SBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void);
74607a6623SBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscksp(void);
75607a6623SBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscsnes(void);
76607a6623SBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscts(void);
775c6c1daeSBarry Smith #endif
785c6c1daeSBarry Smith
795c6c1daeSBarry Smith /*
805c6c1daeSBarry Smith PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.
815c6c1daeSBarry Smith
8260da17ecSBarry Smith This one registers all the system level objects.
835c6c1daeSBarry Smith
845c6c1daeSBarry Smith */
855c6c1daeSBarry Smith #if defined(PETSC_USE_SINGLE_LIBRARY)
PetscDLLibraryRegister_petsc(void)86607a6623SBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petsc(void)
875c6c1daeSBarry Smith #else
88607a6623SBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscsys(void)
895c6c1daeSBarry Smith #endif
905c6c1daeSBarry Smith {
915c6c1daeSBarry Smith PetscFunctionBegin;
925c6c1daeSBarry Smith /*
935c6c1daeSBarry Smith If we got here then PETSc was properly loaded
945c6c1daeSBarry Smith */
959566063dSJacob Faibussowitsch PetscCall(PetscSysInitializePackage());
969566063dSJacob Faibussowitsch PetscCall(PetscDrawInitializePackage());
979566063dSJacob Faibussowitsch PetscCall(PetscViewerInitializePackage());
989566063dSJacob Faibussowitsch PetscCall(PetscRandomInitializePackage());
995c6c1daeSBarry Smith
1005c6c1daeSBarry Smith #if defined(PETSC_USE_SINGLE_LIBRARY)
1019566063dSJacob Faibussowitsch PetscCall(PetscDLLibraryRegister_petscvec());
1029566063dSJacob Faibussowitsch PetscCall(PetscDLLibraryRegister_petscmat());
1039566063dSJacob Faibussowitsch PetscCall(PetscDLLibraryRegister_petscdm());
1049566063dSJacob Faibussowitsch PetscCall(PetscDLLibraryRegister_petscksp());
1059566063dSJacob Faibussowitsch PetscCall(PetscDLLibraryRegister_petscsnes());
1069566063dSJacob Faibussowitsch PetscCall(PetscDLLibraryRegister_petscts());
1075c6c1daeSBarry Smith #endif
1083ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
1095c6c1daeSBarry Smith }
110aa2d57e9SJed Brown #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
111