1*1153da11SBarry Smith #define PETSCSNES_DLL 2*1153da11SBarry Smith 3*1153da11SBarry Smith #include "petscsnes.h" 4*1153da11SBarry Smith 5*1153da11SBarry Smith #undef __FUNCT__ 6*1153da11SBarry Smith #define __FUNCT__ "SNESInitializePackage" 7*1153da11SBarry Smith /*@C 8*1153da11SBarry Smith SNESInitializePackage - This function initializes everything in the SNES package. It is called 9*1153da11SBarry Smith from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to SNESCreate() 10*1153da11SBarry Smith when using static libraries. 11*1153da11SBarry Smith 12*1153da11SBarry Smith Input Parameter: 13*1153da11SBarry Smith path - The dynamic library path, or PETSC_NULL 14*1153da11SBarry Smith 15*1153da11SBarry Smith Level: developer 16*1153da11SBarry Smith 17*1153da11SBarry Smith .keywords: SNES, initialize, package 18*1153da11SBarry Smith .seealso: PetscInitialize() 19*1153da11SBarry Smith @*/ 20*1153da11SBarry Smith PetscErrorCode PETSCSNES_DLLEXPORT SNESInitializePackage(const char path[]) { 21*1153da11SBarry Smith static PetscTruth initialized = PETSC_FALSE; 22*1153da11SBarry Smith char logList[256]; 23*1153da11SBarry Smith char *className; 24*1153da11SBarry Smith PetscTruth opt; 25*1153da11SBarry Smith PetscErrorCode ierr; 26*1153da11SBarry Smith 27*1153da11SBarry Smith PetscFunctionBegin; 28*1153da11SBarry Smith if (initialized) PetscFunctionReturn(0); 29*1153da11SBarry Smith initialized = PETSC_TRUE; 30*1153da11SBarry Smith /* Register Classes */ 31*1153da11SBarry Smith ierr = PetscLogClassRegister(&SNES_COOKIE, "SNES");CHKERRQ(ierr); 32*1153da11SBarry Smith ierr = PetscLogClassRegister(&MATSNESMFCTX_COOKIE, "MatSNESMFCtx");CHKERRQ(ierr); 33*1153da11SBarry Smith /* Register Constructors */ 34*1153da11SBarry Smith ierr = SNESRegisterAll(path);CHKERRQ(ierr); 35*1153da11SBarry Smith /* Register Events */ 36*1153da11SBarry Smith ierr = PetscLogEventRegister(&SNES_Solve, "SNESSolve", SNES_COOKIE);CHKERRQ(ierr); 37*1153da11SBarry Smith ierr = PetscLogEventRegister(&SNES_LineSearch, "SNESLineSearch", SNES_COOKIE);CHKERRQ(ierr); 38*1153da11SBarry Smith ierr = PetscLogEventRegister(&SNES_FunctionEval, "SNESFunctionEval", SNES_COOKIE);CHKERRQ(ierr); 39*1153da11SBarry Smith ierr = PetscLogEventRegister(&SNES_JacobianEval, "SNESJacobianEval", SNES_COOKIE);CHKERRQ(ierr); 40*1153da11SBarry Smith ierr = PetscLogEventRegister(&MATSNESMF_Mult, "MatMultMatrixFre", MAT_COOKIE);CHKERRQ(ierr); 41*1153da11SBarry Smith /* Process info exclusions */ 42*1153da11SBarry Smith ierr = PetscOptionsGetString(PETSC_NULL, "-log_info_exclude", logList, 256, &opt);CHKERRQ(ierr); 43*1153da11SBarry Smith if (opt) { 44*1153da11SBarry Smith ierr = PetscStrstr(logList, "snes", &className);CHKERRQ(ierr); 45*1153da11SBarry Smith if (className) { 46*1153da11SBarry Smith ierr = PetscLogInfoDeactivateClass(SNES_COOKIE);CHKERRQ(ierr); 47*1153da11SBarry Smith } 48*1153da11SBarry Smith } 49*1153da11SBarry Smith /* Process summary exclusions */ 50*1153da11SBarry Smith ierr = PetscOptionsGetString(PETSC_NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr); 51*1153da11SBarry Smith if (opt) { 52*1153da11SBarry Smith ierr = PetscStrstr(logList, "snes", &className);CHKERRQ(ierr); 53*1153da11SBarry Smith if (className) { 54*1153da11SBarry Smith ierr = PetscLogEventDeactivateClass(SNES_COOKIE);CHKERRQ(ierr); 55*1153da11SBarry Smith } 56*1153da11SBarry Smith } 57*1153da11SBarry Smith PetscFunctionReturn(0); 58*1153da11SBarry Smith } 59*1153da11SBarry Smith 60*1153da11SBarry Smith #ifdef PETSC_USE_DYNAMIC_LIBRARIES 61*1153da11SBarry Smith EXTERN_C_BEGIN 62*1153da11SBarry Smith #undef __FUNCT__ 63*1153da11SBarry Smith #define __FUNCT__ "PetscDLLibraryRegister_petscsnes" 64*1153da11SBarry Smith /* 65*1153da11SBarry Smith PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened. 66*1153da11SBarry Smith 67*1153da11SBarry Smith This registers all of the SNES methods that are in the basic PETSc libpetscsnes library. 68*1153da11SBarry Smith 69*1153da11SBarry Smith Input Parameter: 70*1153da11SBarry Smith path - library path 71*1153da11SBarry Smith 72*1153da11SBarry Smith */ 73*1153da11SBarry Smith PetscErrorCode PETSCSNES_DLLEXPORT PetscDLLibraryRegister_petscsnes(char *path) 74*1153da11SBarry Smith { 75*1153da11SBarry Smith PetscErrorCode ierr; 76*1153da11SBarry Smith 77*1153da11SBarry Smith ierr = PetscInitializeNoArguments(); if (ierr) return 1; 78*1153da11SBarry Smith PetscFunctionBegin; 79*1153da11SBarry Smith /* 80*1153da11SBarry Smith If we got here then PETSc was properly loaded 81*1153da11SBarry Smith */ 82*1153da11SBarry Smith ierr = SNESInitializePackage(path);CHKERRQ(ierr); 83*1153da11SBarry Smith PetscFunctionReturn(0); 84*1153da11SBarry Smith } 85*1153da11SBarry Smith EXTERN_C_END 86*1153da11SBarry Smith 87*1153da11SBarry Smith /* --------------------------------------------------------------------------*/ 88*1153da11SBarry Smith static const char *contents = "PETSc nonlinear solver library. \n\ 89*1153da11SBarry Smith line search Newton methods\n\ 90*1153da11SBarry Smith trust region Newton methods\n"; 91*1153da11SBarry Smith static const char *authors = PETSC_AUTHOR_INFO; 92*1153da11SBarry Smith 93*1153da11SBarry Smith 94*1153da11SBarry Smith #endif /* PETSC_USE_DYNAMIC_LIBRARIES */ 95