1 2 #include <petscdraw.h> 3 4 extern PetscLogEvent PETSC_Barrier; 5 6 static PetscBool PetscSysPackageInitialized = PETSC_FALSE; 7 #undef __FUNCT__ 8 #define __FUNCT__ "PetscSysFinalizePackage" 9 /*@C 10 PetscSysFinalizePackage - This function destroys everything in the Petsc interface to Mathematica. It is 11 called from PetscFinalize(). 12 13 Level: developer 14 15 .keywords: Petsc, destroy, package, mathematica 16 .seealso: PetscFinalize() 17 @*/ 18 PetscErrorCode PetscSysFinalizePackage(void) 19 { 20 PetscFunctionBegin; 21 PetscSysPackageInitialized = PETSC_FALSE; 22 PetscFunctionReturn(0); 23 } 24 25 #undef __FUNCT__ 26 #define __FUNCT__ "PetscSysInitializePackage" 27 /*@C 28 PetscSysInitializePackage - This function initializes everything in the main Petsc package. It is called 29 from PetscDLLibraryRegister() when using dynamic libraries, and on the call to PetscInitialize() 30 when using static libraries. 31 32 Input Parameter: 33 path - The dynamic library path, or NULL 34 35 Level: developer 36 37 .keywords: Petsc, initialize, package 38 .seealso: PetscInitialize() 39 @*/ 40 PetscErrorCode PetscSysInitializePackage(const char path[]) 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 /* Process info exclusions */ 57 ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr); 58 if (opt) { 59 ierr = PetscStrstr(logList, "null", &className);CHKERRQ(ierr); 60 if (className) { 61 ierr = PetscInfoDeactivateClass(0);CHKERRQ(ierr); 62 } 63 } 64 /* Process summary exclusions */ 65 ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr); 66 if (opt) { 67 ierr = PetscStrstr(logList, "null", &className);CHKERRQ(ierr); 68 if (className) { 69 ierr = PetscLogEventDeactivateClass(0);CHKERRQ(ierr); 70 } 71 } 72 ierr = PetscRegisterFinalize(PetscSysFinalizePackage);CHKERRQ(ierr); 73 PetscFunctionReturn(0); 74 } 75 76 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 77 EXTERN_C_BEGIN 78 79 #if defined(PETSC_USE_SINGLE_LIBRARY) 80 extern PetscErrorCode PetscDLLibraryRegister_petscvec(const char[]); 81 extern PetscErrorCode PetscDLLibraryRegister_petscmat(const char[]); 82 extern PetscErrorCode PetscDLLibraryRegister_petscdm(const char[]); 83 extern PetscErrorCode PetscDLLibraryRegister_petscksp(const char[]); 84 extern PetscErrorCode PetscDLLibraryRegister_petscsnes(const char[]); 85 extern PetscErrorCode PetscDLLibraryRegister_petscts(const char[]); 86 #endif 87 88 #undef __FUNCT__ 89 #if defined(PETSC_USE_SINGLE_LIBRARY) 90 #define __FUNCT__ "PetscDLLibraryRegister_petsc" 91 #else 92 #define __FUNCT__ "PetscDLLibraryRegister_petscsys" 93 #endif 94 /* 95 PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 96 97 This one registers all the draw and PetscViewer objects. 98 99 Input Parameter: 100 path - library path 101 */ 102 #if defined(PETSC_USE_SINGLE_LIBRARY) 103 PetscErrorCode PetscDLLibraryRegister_petsc(const char path[]) 104 #else 105 PetscErrorCode PetscDLLibraryRegister_petscsys(const char path[]) 106 #endif 107 { 108 PetscErrorCode ierr; 109 110 PetscFunctionBegin; 111 /* 112 If we got here then PETSc was properly loaded 113 */ 114 ierr = PetscSysInitializePackage(path);CHKERRQ(ierr); 115 ierr = PetscDrawInitializePackage(path);CHKERRQ(ierr); 116 ierr = PetscViewerInitializePackage(path);CHKERRQ(ierr); 117 ierr = PetscRandomInitializePackage(path);CHKERRQ(ierr); 118 119 #if defined(PETSC_USE_SINGLE_LIBRARY) 120 ierr = PetscDLLibraryRegister_petscvec(path);CHKERRQ(ierr); 121 ierr = PetscDLLibraryRegister_petscmat(path);CHKERRQ(ierr); 122 ierr = PetscDLLibraryRegister_petscdm(path);CHKERRQ(ierr); 123 ierr = PetscDLLibraryRegister_petscksp(path);CHKERRQ(ierr); 124 ierr = PetscDLLibraryRegister_petscsnes(path);CHKERRQ(ierr); 125 ierr = PetscDLLibraryRegister_petscts(path);CHKERRQ(ierr); 126 #endif 127 PetscFunctionReturn(0); 128 } 129 EXTERN_C_END 130 #endif 131 132 133