1 2 #include <petscdraw.h> 3 #include <petscviewer.h> 4 #include <petsc/private/viewerimpl.h> 5 6 static PetscBool PetscSysPackageInitialized = PETSC_FALSE; 7 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(). 11 12 Level: developer 13 14 .seealso: PetscFinalize() 15 @*/ 16 PetscErrorCode PetscSysFinalizePackage(void) 17 { 18 PetscErrorCode ierr; 19 20 PetscFunctionBegin; 21 if (Petsc_Seq_keyval != MPI_KEYVAL_INVALID) { 22 ierr = MPI_Comm_free_keyval(&Petsc_Seq_keyval);CHKERRQ(ierr); 23 } 24 PetscSysPackageInitialized = PETSC_FALSE; 25 PetscFunctionReturn(0); 26 } 27 28 /*@C 29 PetscSysInitializePackage - This function initializes everything in the main Petsc package. It is called 30 from PetscDLLibraryRegister_petsc() when using dynamic libraries, and on the call to PetscInitialize() 31 when using shared or static libraries. 32 33 Level: developer 34 35 .seealso: PetscInitialize() 36 @*/ 37 PetscErrorCode PetscSysInitializePackage(void) 38 { 39 char logList[256]; 40 PetscBool opt,pkg; 41 PetscErrorCode ierr; 42 43 PetscFunctionBegin; 44 if (PetscSysPackageInitialized) PetscFunctionReturn(0); 45 PetscSysPackageInitialized = PETSC_TRUE; 46 /* Register Classes */ 47 ierr = PetscClassIdRegister("Object",&PETSC_OBJECT_CLASSID);CHKERRQ(ierr); 48 ierr = PetscClassIdRegister("Container",&PETSC_CONTAINER_CLASSID);CHKERRQ(ierr); 49 50 /* Register Events */ 51 ierr = PetscLogEventRegister("PetscBarrier", PETSC_SMALLEST_CLASSID,&PETSC_Barrier);CHKERRQ(ierr); 52 ierr = PetscLogEventRegister("BuildTwoSided",PETSC_SMALLEST_CLASSID,&PETSC_BuildTwoSided);CHKERRQ(ierr); 53 ierr = PetscLogEventRegister("BuildTwoSidedF",PETSC_SMALLEST_CLASSID,&PETSC_BuildTwoSidedF);CHKERRQ(ierr); 54 /* Process Info */ 55 { 56 PetscClassId classids[1]; 57 58 classids[0] = PETSC_SMALLEST_CLASSID; 59 ierr = PetscInfoProcessClass("sys", 1, classids);CHKERRQ(ierr); 60 } 61 /* Process summary exclusions */ 62 ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr); 63 if (opt) { 64 ierr = PetscStrInList("null",logList,',',&pkg);CHKERRQ(ierr); 65 if (pkg) {ierr = PetscLogEventExcludeClass(PETSC_SMALLEST_CLASSID);CHKERRQ(ierr);} 66 } 67 ierr = PetscRegisterFinalize(PetscSysFinalizePackage);CHKERRQ(ierr); 68 PetscFunctionReturn(0); 69 } 70 71 #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES) 72 73 #if defined(PETSC_USE_SINGLE_LIBRARY) 74 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscvec(void); 75 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscmat(void); 76 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void); 77 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscksp(void); 78 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscsnes(void); 79 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscts(void); 80 #endif 81 82 #if defined(PETSC_USE_SINGLE_LIBRARY) 83 #else 84 #endif 85 /* 86 PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 87 88 This one registers all the draw and PetscViewer objects. 89 90 */ 91 #if defined(PETSC_USE_SINGLE_LIBRARY) 92 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petsc(void) 93 #else 94 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscsys(void) 95 #endif 96 { 97 PetscErrorCode ierr; 98 99 PetscFunctionBegin; 100 /* 101 If we got here then PETSc was properly loaded 102 */ 103 ierr = PetscSysInitializePackage();CHKERRQ(ierr); 104 ierr = PetscDrawInitializePackage();CHKERRQ(ierr); 105 ierr = PetscViewerInitializePackage();CHKERRQ(ierr); 106 ierr = PetscRandomInitializePackage();CHKERRQ(ierr); 107 108 #if defined(PETSC_USE_SINGLE_LIBRARY) 109 ierr = PetscDLLibraryRegister_petscvec();CHKERRQ(ierr); 110 ierr = PetscDLLibraryRegister_petscmat();CHKERRQ(ierr); 111 ierr = PetscDLLibraryRegister_petscdm();CHKERRQ(ierr); 112 ierr = PetscDLLibraryRegister_petscksp();CHKERRQ(ierr); 113 ierr = PetscDLLibraryRegister_petscsnes();CHKERRQ(ierr); 114 ierr = PetscDLLibraryRegister_petscts();CHKERRQ(ierr); 115 #endif 116 PetscFunctionReturn(0); 117 } 118 #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */ 119