1*a7e14dcfSSatish Balay #define TAOSOLVER_DLL 2*a7e14dcfSSatish Balay 3*a7e14dcfSSatish Balay #include "tao-private/taosolver_impl.h" 4*a7e14dcfSSatish Balay #include "tao-private/taodm_impl.h" 5*a7e14dcfSSatish Balay 6*a7e14dcfSSatish Balay static PetscBool TaoPackageInitialized = PETSC_FALSE; 7*a7e14dcfSSatish Balay 8*a7e14dcfSSatish Balay #undef __FUNCT__ 9*a7e14dcfSSatish Balay #define __FUNCT__ "TaoFinalizePackage" 10*a7e14dcfSSatish Balay /*@C 11*a7e14dcfSSatish Balay TaoFinalizePackage - This function destroys everything in the PETSc/TAO 12*a7e14dcfSSatish Balay interface to the TaoSolver package. It is called from PetscFinalize(). 13*a7e14dcfSSatish Balay 14*a7e14dcfSSatish Balay Level: developer 15*a7e14dcfSSatish Balay @*/ 16*a7e14dcfSSatish Balay PetscErrorCode TaoFinalizePackage(void) 17*a7e14dcfSSatish Balay { 18*a7e14dcfSSatish Balay PetscErrorCode ierr; 19*a7e14dcfSSatish Balay 20*a7e14dcfSSatish Balay PetscFunctionBegin; 21*a7e14dcfSSatish Balay ierr = PetscFunctionListDestroy(&TaoSolverList); CHKERRQ(ierr); 22*a7e14dcfSSatish Balay TaoPackageInitialized = PETSC_FALSE; 23*a7e14dcfSSatish Balay PetscFunctionReturn(0); 24*a7e14dcfSSatish Balay } 25*a7e14dcfSSatish Balay 26*a7e14dcfSSatish Balay #undef __FUNCT__ 27*a7e14dcfSSatish Balay #define __FUNCT__ "TaoInitializePackage" 28*a7e14dcfSSatish Balay /*@C 29*a7e14dcfSSatish Balay TaoInitializePackage - This function sets up PETSc to use the TaoSolver 30*a7e14dcfSSatish Balay package. When using static libraries, this function is called from the 31*a7e14dcfSSatish Balay first entry to TaoCreate(); when using shared libraries, it is called 32*a7e14dcfSSatish Balay from PetscDLLibraryRegister() 33*a7e14dcfSSatish Balay 34*a7e14dcfSSatish Balay Level: developer 35*a7e14dcfSSatish Balay 36*a7e14dcfSSatish Balay .seealso: TaoCreate() 37*a7e14dcfSSatish Balay @*/ 38*a7e14dcfSSatish Balay PetscErrorCode TaoInitializePackage() 39*a7e14dcfSSatish Balay { 40*a7e14dcfSSatish Balay PetscErrorCode ierr; 41*a7e14dcfSSatish Balay 42*a7e14dcfSSatish Balay PetscFunctionBegin; 43*a7e14dcfSSatish Balay 44*a7e14dcfSSatish Balay if (TaoPackageInitialized) PetscFunctionReturn(0); 45*a7e14dcfSSatish Balay TaoPackageInitialized = PETSC_TRUE; 46*a7e14dcfSSatish Balay 47*a7e14dcfSSatish Balay ierr = PetscClassIdRegister("TaoSolver",&TAOSOLVER_CLASSID); CHKERRQ(ierr); 48*a7e14dcfSSatish Balay 49*a7e14dcfSSatish Balay /* Tell PETSc what solvers are available */ 50*a7e14dcfSSatish Balay ierr = TaoSolverRegisterAll(); CHKERRQ(ierr); 51*a7e14dcfSSatish Balay 52*a7e14dcfSSatish Balay /* Tell PETSc what events are associated with TaoSolver */ 53*a7e14dcfSSatish Balay ierr = PetscLogEventRegister("TaoSolve",TAOSOLVER_CLASSID,&TaoSolver_Solve); CHKERRQ(ierr); 54*a7e14dcfSSatish Balay ierr = PetscLogEventRegister("TaoObjectiveEval",TAOSOLVER_CLASSID,&TaoSolver_ObjectiveEval); CHKERRQ(ierr); 55*a7e14dcfSSatish Balay ierr = PetscLogEventRegister("TaoGradientEval",TAOSOLVER_CLASSID,&TaoSolver_GradientEval); CHKERRQ(ierr); 56*a7e14dcfSSatish Balay ierr = PetscLogEventRegister("TaoHessianEval",TAOSOLVER_CLASSID,&TaoSolver_HessianEval); CHKERRQ(ierr); 57*a7e14dcfSSatish Balay ierr = PetscLogEventRegister("TaoConstraintsEval",TAOSOLVER_CLASSID,&TaoSolver_ConstraintsEval); CHKERRQ(ierr); 58*a7e14dcfSSatish Balay ierr = PetscLogEventRegister("TaoJacobianEval",TAOSOLVER_CLASSID,&TaoSolver_JacobianEval); CHKERRQ(ierr); 59*a7e14dcfSSatish Balay 60*a7e14dcfSSatish Balay ierr = PetscRegisterFinalize(TaoFinalizePackage); CHKERRQ(ierr); 61*a7e14dcfSSatish Balay PetscFunctionReturn(0); 62*a7e14dcfSSatish Balay } 63*a7e14dcfSSatish Balay 64*a7e14dcfSSatish Balay #ifdef PETSC_USE_DYNAMIC_LIBRARIES 65*a7e14dcfSSatish Balay #undef __FUNCT__ 66*a7e14dcfSSatish Balay #define __FUNCT__ "PetscDLLibraryRegister_tao" 67*a7e14dcfSSatish Balay /* 68*a7e14dcfSSatish Balay PetscDLLibraryRegister - this function is called when the dynamic library it 69*a7e14dcfSSatish Balay is in is opened. 70*a7e14dcfSSatish Balay 71*a7e14dcfSSatish Balay This registers all of the TaoSolver methods that are in the libtaosolver 72*a7e14dcfSSatish Balay library. 73*a7e14dcfSSatish Balay 74*a7e14dcfSSatish Balay Input Parameter: 75*a7e14dcfSSatish Balay . path - library path 76*a7e14dcfSSatish Balay */ 77*a7e14dcfSSatish Balay 78*a7e14dcfSSatish Balay PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_tao(void) 79*a7e14dcfSSatish Balay { 80*a7e14dcfSSatish Balay PetscErrorCode ierr; 81*a7e14dcfSSatish Balay 82*a7e14dcfSSatish Balay PetscFunctionBegin; 83*a7e14dcfSSatish Balay ierr = TaoInitializePackage(); CHKERRQ(ierr); 84*a7e14dcfSSatish Balay ierr = TaoLineSearchInitializePackage(); CHKERRQ(ierr); 85*a7e14dcfSSatish Balay PetscFunctionReturn(0); 86*a7e14dcfSSatish Balay } 87*a7e14dcfSSatish Balay 88*a7e14dcfSSatish Balay #endif /* PETSC_USE_DYNAMIC_LIBRARIES */ 89