1af0996ceSBarry Smith #include <petsc/private/taolinesearchimpl.h> 2a7e14dcfSSatish Balay 3a7e14dcfSSatish Balay PETSC_EXTERN PetscErrorCode TaoLineSearchCreate_Unit(TaoLineSearch); 4a7e14dcfSSatish Balay PETSC_EXTERN PetscErrorCode TaoLineSearchCreate_MT(TaoLineSearch); 5a7e14dcfSSatish Balay PETSC_EXTERN PetscErrorCode TaoLineSearchCreate_GPCG(TaoLineSearch); 6a7e14dcfSSatish Balay PETSC_EXTERN PetscErrorCode TaoLineSearchCreate_Armijo(TaoLineSearch); 7a7e14dcfSSatish Balay PETSC_EXTERN PetscErrorCode TaoLineSearchCreate_OWArmijo(TaoLineSearch); 8a7e14dcfSSatish Balay static PetscBool TaoLineSearchPackageInitialized = PETSC_FALSE; 9a7e14dcfSSatish Balay 10a7e14dcfSSatish Balay /*@C 1120f4b53cSBarry Smith TaoLineSearchFinalizePackage - This function destroys everything in the `TaoLineSearch` package. It is called from `PetscFinalize()`. 12a7e14dcfSSatish Balay 13a7e14dcfSSatish Balay Level: developer 1420f4b53cSBarry Smith 1520f4b53cSBarry Smith .seealso: `Tao`, `TaoLineSearch` 16a7e14dcfSSatish Balay @*/ 17d71ae5a4SJacob Faibussowitsch PetscErrorCode TaoLineSearchFinalizePackage(void) 18d71ae5a4SJacob Faibussowitsch { 19a7e14dcfSSatish Balay PetscFunctionBegin; 209566063dSJacob Faibussowitsch PetscCall(PetscFunctionListDestroy(&TaoLineSearchList)); 21a7e14dcfSSatish Balay TaoLineSearchPackageInitialized = PETSC_FALSE; 223ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 23a7e14dcfSSatish Balay } 24a7e14dcfSSatish Balay 25a7e14dcfSSatish Balay /*@C 26a7e14dcfSSatish Balay TaoLineSearchInitializePackage - This function registers the line-search 2720f4b53cSBarry Smith algorithms in `Tao`. When using shared or static libraries, this function is called from the 2820f4b53cSBarry Smith first entry to `TaoCreate()`; when using dynamic, it is called 298a690491SBarry Smith from PetscDLLibraryRegister_tao() 30a7e14dcfSSatish Balay 31a7e14dcfSSatish Balay Level: developer 32a7e14dcfSSatish Balay 3320f4b53cSBarry Smith .seealso: `Tao`, `TaoLineSearch`, `TaoLineSearchCreate()` 34a7e14dcfSSatish Balay @*/ 35d71ae5a4SJacob Faibussowitsch PetscErrorCode TaoLineSearchInitializePackage(void) 36d71ae5a4SJacob Faibussowitsch { 37a7e14dcfSSatish Balay PetscFunctionBegin; 383ba16761SJacob 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)); 42*519ee83aSToby Isaac PetscCall(PetscInfoProcessClass("taolinesearch", 1, &TAOLINESEARCH_CLASSID)); 439566063dSJacob Faibussowitsch PetscCall(TaoLineSearchRegister("unit", TaoLineSearchCreate_Unit)); 449566063dSJacob Faibussowitsch PetscCall(TaoLineSearchRegister("more-thuente", TaoLineSearchCreate_MT)); 459566063dSJacob Faibussowitsch PetscCall(TaoLineSearchRegister("gpcg", TaoLineSearchCreate_GPCG)); 469566063dSJacob Faibussowitsch PetscCall(TaoLineSearchRegister("armijo", TaoLineSearchCreate_Armijo)); 479566063dSJacob Faibussowitsch PetscCall(TaoLineSearchRegister("owarmijo", TaoLineSearchCreate_OWArmijo)); 489566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("TaoLSApply", TAOLINESEARCH_CLASSID, &TAOLINESEARCH_Apply)); 499566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("TaoLSEval", TAOLINESEARCH_CLASSID, &TAOLINESEARCH_Eval)); 5046bdf8c8SLisandro Dalcin #endif 519566063dSJacob Faibussowitsch PetscCall(PetscRegisterFinalize(TaoLineSearchFinalizePackage)); 523ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 53a7e14dcfSSatish Balay } 54