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