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 @*/
TaoLineSearchFinalizePackage(void)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 @*/
TaoLineSearchInitializePackage(void)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