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