1a7e14dcfSSatish Balay #define TAOLINESEARCH_DLL 2af0996ceSBarry Smith #include <petsc/private/taolinesearchimpl.h> 3a7e14dcfSSatish Balay 4a7e14dcfSSatish Balay PETSC_EXTERN PetscErrorCode TaoLineSearchCreate_Unit(TaoLineSearch); 5a7e14dcfSSatish Balay PETSC_EXTERN PetscErrorCode TaoLineSearchCreate_MT(TaoLineSearch); 6a7e14dcfSSatish Balay PETSC_EXTERN PetscErrorCode TaoLineSearchCreate_GPCG(TaoLineSearch); 7a7e14dcfSSatish Balay PETSC_EXTERN PetscErrorCode TaoLineSearchCreate_Armijo(TaoLineSearch); 8a7e14dcfSSatish Balay PETSC_EXTERN PetscErrorCode TaoLineSearchCreate_OWArmijo(TaoLineSearch); 9a7e14dcfSSatish Balay static PetscBool TaoLineSearchPackageInitialized = PETSC_FALSE; 10a7e14dcfSSatish Balay 11a7e14dcfSSatish Balay /*@C 12a7e14dcfSSatish Balay TaoLineSearchFinalizePackage - This function destroys everything in the PETSc/TAO 13a7e14dcfSSatish Balay interface to the TaoLineSearch package. It is called from PetscFinalize(). 14a7e14dcfSSatish Balay 15a7e14dcfSSatish Balay Level: developer 16a7e14dcfSSatish Balay @*/ 17d71ae5a4SJacob Faibussowitsch PetscErrorCode TaoLineSearchFinalizePackage(void) 18d71ae5a4SJacob Faibussowitsch { 19a7e14dcfSSatish Balay PetscFunctionBegin; 209566063dSJacob Faibussowitsch PetscCall(PetscFunctionListDestroy(&TaoLineSearchList)); 21a7e14dcfSSatish Balay TaoLineSearchPackageInitialized = PETSC_FALSE; 22*3ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 23a7e14dcfSSatish Balay } 24a7e14dcfSSatish Balay 25a7e14dcfSSatish Balay /*@C 26a7e14dcfSSatish Balay TaoLineSearchInitializePackage - This function registers the line-search 278a690491SBarry Smith algorithms in TAO. When using shared or static libraries, this function is called from the 288a690491SBarry Smith first entry to TaoCreate(); when using dynamic, it is called 298a690491SBarry Smith from PetscDLLibraryRegister_tao() 30a7e14dcfSSatish Balay 31a7e14dcfSSatish Balay Level: developer 32a7e14dcfSSatish Balay 33db781477SPatrick Sanan .seealso: `TaoLineSearchCreate()` 34a7e14dcfSSatish Balay @*/ 35d71ae5a4SJacob Faibussowitsch PetscErrorCode TaoLineSearchInitializePackage(void) 36d71ae5a4SJacob Faibussowitsch { 37a7e14dcfSSatish Balay PetscFunctionBegin; 38*3ba16761SJacob Faibussowitsch if (TaoLineSearchPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS); 39a7e14dcfSSatish Balay TaoLineSearchPackageInitialized = PETSC_TRUE; 4046bdf8c8SLisandro Dalcin #if !defined(PETSC_USE_COMPLEX) 419566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("TaoLineSearch", &TAOLINESEARCH_CLASSID)); 429566063dSJacob Faibussowitsch PetscCall(TaoLineSearchRegister("unit", TaoLineSearchCreate_Unit)); 439566063dSJacob Faibussowitsch PetscCall(TaoLineSearchRegister("more-thuente", TaoLineSearchCreate_MT)); 449566063dSJacob Faibussowitsch PetscCall(TaoLineSearchRegister("gpcg", TaoLineSearchCreate_GPCG)); 459566063dSJacob Faibussowitsch PetscCall(TaoLineSearchRegister("armijo", TaoLineSearchCreate_Armijo)); 469566063dSJacob Faibussowitsch PetscCall(TaoLineSearchRegister("owarmijo", TaoLineSearchCreate_OWArmijo)); 479566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("TaoLSApply", TAOLINESEARCH_CLASSID, &TAOLINESEARCH_Apply)); 489566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("TaoLSEval", TAOLINESEARCH_CLASSID, &TAOLINESEARCH_Eval)); 4946bdf8c8SLisandro Dalcin #endif 509566063dSJacob Faibussowitsch PetscCall(PetscRegisterFinalize(TaoLineSearchFinalizePackage)); 51*3ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 52a7e14dcfSSatish Balay } 53