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_Keyval_free(&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 char *className; 44 PetscBool opt; 45 PetscErrorCode ierr; 46 47 PetscFunctionBegin; 48 if (PetscSysPackageInitialized) PetscFunctionReturn(0); 49 PetscSysPackageInitialized = PETSC_TRUE; 50 /* Register Classes */ 51 ierr = PetscClassIdRegister("Object",&PETSC_OBJECT_CLASSID);CHKERRQ(ierr); 52 ierr = PetscClassIdRegister("Container",&PETSC_CONTAINER_CLASSID);CHKERRQ(ierr); 53 54 /* Register Events */ 55 ierr = PetscLogEventRegister("PetscBarrier", PETSC_SMALLEST_CLASSID,&PETSC_Barrier);CHKERRQ(ierr); 56 ierr = PetscLogEventRegister("BuildTwoSided",PETSC_SMALLEST_CLASSID,&PETSC_BuildTwoSided);CHKERRQ(ierr); 57 ierr = PetscLogEventRegister("BuildTwoSidedF",PETSC_SMALLEST_CLASSID,&PETSC_BuildTwoSidedF);CHKERRQ(ierr); 58 /* Process info exclusions */ 59 ierr = PetscOptionsGetString(NULL,NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 60 if (opt) { 61 ierr = PetscStrstr(logList, "null", &className);CHKERRQ(ierr); 62 if (className) { 63 ierr = PetscInfoDeactivateClass(0);CHKERRQ(ierr); 64 } 65 } 66 /* Process summary exclusions */ 67 ierr = PetscOptionsGetString(NULL,NULL, "-log_exclude", logList, 256, &opt);CHKERRQ(ierr); 68 if (opt) { 69 ierr = PetscStrstr(logList, "null", &className);CHKERRQ(ierr); 70 if (className) { 71 ierr = PetscLogEventDeactivateClass(0);CHKERRQ(ierr); 72 } 73 } 74 ierr = PetscRegisterFinalize(PetscSysFinalizePackage);CHKERRQ(ierr); 75 PetscFunctionReturn(0); 76 } 77 78 #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES) 79 80 #if defined(PETSC_USE_SINGLE_LIBRARY) 81 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscvec(void); 82 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscmat(void); 83 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void); 84 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscksp(void); 85 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscsnes(void); 86 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscts(void); 87 #endif 88 89 #if defined(PETSC_USE_SINGLE_LIBRARY) 90 #else 91 #endif 92 /* 93 PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 94 95 This one registers all the draw and PetscViewer objects. 96 97 */ 98 #if defined(PETSC_USE_SINGLE_LIBRARY) 99 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petsc(void) 100 #else 101 PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscsys(void) 102 #endif 103 { 104 PetscErrorCode ierr; 105 106 PetscFunctionBegin; 107 /* 108 If we got here then PETSc was properly loaded 109 */ 110 ierr = PetscSysInitializePackage();CHKERRQ(ierr); 111 ierr = PetscDrawInitializePackage();CHKERRQ(ierr); 112 ierr = PetscViewerInitializePackage();CHKERRQ(ierr); 113 ierr = PetscRandomInitializePackage();CHKERRQ(ierr); 114 115 #if defined(PETSC_USE_SINGLE_LIBRARY) 116 ierr = PetscDLLibraryRegister_petscvec();CHKERRQ(ierr); 117 ierr = PetscDLLibraryRegister_petscmat();CHKERRQ(ierr); 118 ierr = PetscDLLibraryRegister_petscdm();CHKERRQ(ierr); 119 ierr = PetscDLLibraryRegister_petscksp();CHKERRQ(ierr); 120 ierr = PetscDLLibraryRegister_petscsnes();CHKERRQ(ierr); 121 ierr = PetscDLLibraryRegister_petscts();CHKERRQ(ierr); 122 #endif 123 PetscFunctionReturn(0); 124 } 125 #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */ 126