15c6c1daeSBarry Smith 25c6c1daeSBarry Smith #include <petscdraw.h> 32c1a2d08SJed Brown #include <petscviewer.h> 4974a8051SSatish Balay #include <petsc/private/viewerimpl.h> 55c6c1daeSBarry Smith 65c6c1daeSBarry Smith static PetscBool PetscSysPackageInitialized = PETSC_FALSE; 7d4c7638eSBarry Smith 85c6c1daeSBarry Smith /*@C 9d4c7638eSBarry Smith PetscSysFinalizePackage - This function destroys everything in the PETSc created internally in the system library portion of PETSc. 10811af0c4SBarry Smith It is called from `PetscFinalize()`. 115c6c1daeSBarry Smith 125c6c1daeSBarry Smith Level: developer 135c6c1daeSBarry Smith 14db781477SPatrick Sanan .seealso: `PetscFinalize()` 155c6c1daeSBarry Smith @*/ 16d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscSysFinalizePackage(void) 17d71ae5a4SJacob Faibussowitsch { 185c6c1daeSBarry Smith PetscFunctionBegin; 1948a46eb9SPierre Jolivet if (Petsc_Seq_keyval != MPI_KEYVAL_INVALID) PetscCallMPI(MPI_Comm_free_keyval(&Petsc_Seq_keyval)); 205c6c1daeSBarry Smith PetscSysPackageInitialized = PETSC_FALSE; 21*3ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 225c6c1daeSBarry Smith } 235c6c1daeSBarry Smith 245c6c1daeSBarry Smith /*@C 255c6c1daeSBarry Smith PetscSysInitializePackage - This function initializes everything in the main Petsc package. It is called 26811af0c4SBarry Smith from PetscDLLibraryRegister_petsc() when using dynamic libraries, and on the call to `PetscInitialize()` 278a690491SBarry Smith when using shared or static libraries. 285c6c1daeSBarry Smith 295c6c1daeSBarry Smith Level: developer 305c6c1daeSBarry Smith 31db781477SPatrick Sanan .seealso: `PetscInitialize()` 325c6c1daeSBarry Smith @*/ 33d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscSysInitializePackage(void) 34d71ae5a4SJacob Faibussowitsch { 355c6c1daeSBarry Smith char logList[256]; 368e81d068SLisandro Dalcin PetscBool opt, pkg; 375c6c1daeSBarry Smith 385c6c1daeSBarry Smith PetscFunctionBegin; 39*3ba16761SJacob Faibussowitsch if (PetscSysPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS); 405c6c1daeSBarry Smith PetscSysPackageInitialized = PETSC_TRUE; 415c6c1daeSBarry Smith /* Register Classes */ 429566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("Object", &PETSC_OBJECT_CLASSID)); 439566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("Container", &PETSC_CONTAINER_CLASSID)); 445c6c1daeSBarry Smith 455c6c1daeSBarry Smith /* Register Events */ 469566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("PetscBarrier", PETSC_SMALLEST_CLASSID, &PETSC_Barrier)); 479566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("BuildTwoSided", PETSC_SMALLEST_CLASSID, &PETSC_BuildTwoSided)); 489566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("BuildTwoSidedF", PETSC_SMALLEST_CLASSID, &PETSC_BuildTwoSidedF)); 49e94e781bSJacob Faibussowitsch /* Process Info */ 50e94e781bSJacob Faibussowitsch { 51e94e781bSJacob Faibussowitsch PetscClassId classids[1]; 52e94e781bSJacob Faibussowitsch 53e94e781bSJacob Faibussowitsch classids[0] = PETSC_SMALLEST_CLASSID; 549566063dSJacob Faibussowitsch PetscCall(PetscInfoProcessClass("sys", 1, classids)); 555c6c1daeSBarry Smith } 565c6c1daeSBarry Smith /* Process summary exclusions */ 579566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt)); 585c6c1daeSBarry Smith if (opt) { 599566063dSJacob Faibussowitsch PetscCall(PetscStrInList("null", logList, ',', &pkg)); 609566063dSJacob Faibussowitsch if (pkg) PetscCall(PetscLogEventExcludeClass(PETSC_SMALLEST_CLASSID)); 615c6c1daeSBarry Smith } 629566063dSJacob Faibussowitsch PetscCall(PetscRegisterFinalize(PetscSysFinalizePackage)); 63*3ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 645c6c1daeSBarry Smith } 655c6c1daeSBarry Smith 66aa2d57e9SJed Brown #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES) 675c6c1daeSBarry Smith 685c6c1daeSBarry Smith #if defined(PETSC_USE_SINGLE_LIBRARY) 69607a6623SBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscvec(void); 70607a6623SBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscmat(void); 71607a6623SBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void); 72607a6623SBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscksp(void); 73607a6623SBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscsnes(void); 74607a6623SBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscts(void); 755c6c1daeSBarry Smith #endif 765c6c1daeSBarry Smith 775c6c1daeSBarry Smith /* 785c6c1daeSBarry Smith PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 795c6c1daeSBarry Smith 8060da17ecSBarry Smith This one registers all the system level objects. 815c6c1daeSBarry Smith 825c6c1daeSBarry Smith */ 835c6c1daeSBarry Smith #if defined(PETSC_USE_SINGLE_LIBRARY) 84607a6623SBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petsc(void) 855c6c1daeSBarry Smith #else 86607a6623SBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscsys(void) 875c6c1daeSBarry Smith #endif 885c6c1daeSBarry Smith { 895c6c1daeSBarry Smith PetscFunctionBegin; 905c6c1daeSBarry Smith /* 915c6c1daeSBarry Smith If we got here then PETSc was properly loaded 925c6c1daeSBarry Smith */ 939566063dSJacob Faibussowitsch PetscCall(PetscSysInitializePackage()); 949566063dSJacob Faibussowitsch PetscCall(PetscDrawInitializePackage()); 959566063dSJacob Faibussowitsch PetscCall(PetscViewerInitializePackage()); 969566063dSJacob Faibussowitsch PetscCall(PetscRandomInitializePackage()); 975c6c1daeSBarry Smith 985c6c1daeSBarry Smith #if defined(PETSC_USE_SINGLE_LIBRARY) 999566063dSJacob Faibussowitsch PetscCall(PetscDLLibraryRegister_petscvec()); 1009566063dSJacob Faibussowitsch PetscCall(PetscDLLibraryRegister_petscmat()); 1019566063dSJacob Faibussowitsch PetscCall(PetscDLLibraryRegister_petscdm()); 1029566063dSJacob Faibussowitsch PetscCall(PetscDLLibraryRegister_petscksp()); 1039566063dSJacob Faibussowitsch PetscCall(PetscDLLibraryRegister_petscsnes()); 1049566063dSJacob Faibussowitsch PetscCall(PetscDLLibraryRegister_petscts()); 1055c6c1daeSBarry Smith #endif 106*3ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 1075c6c1daeSBarry Smith } 108aa2d57e9SJed Brown #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */ 109