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