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 @*/ 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 @*/ 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) 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