xref: /petsc/src/tao/linesearch/interface/dlregis_taolinesearch.c (revision 20f4b53cbb5e9bd9ef12b76a8697d60d197cda17)
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
12*20f4b53cSBarry Smith   TaoLineSearchFinalizePackage - This function destroys everything in the `TaoLineSearch` package. It is called from `PetscFinalize()`.
13a7e14dcfSSatish Balay 
14a7e14dcfSSatish Balay   Level: developer
15*20f4b53cSBarry Smith 
16*20f4b53cSBarry Smith .seealso: `Tao`, `TaoLineSearch`
17a7e14dcfSSatish Balay @*/
18d71ae5a4SJacob Faibussowitsch PetscErrorCode TaoLineSearchFinalizePackage(void)
19d71ae5a4SJacob Faibussowitsch {
20a7e14dcfSSatish Balay   PetscFunctionBegin;
219566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&TaoLineSearchList));
22a7e14dcfSSatish Balay   TaoLineSearchPackageInitialized = PETSC_FALSE;
233ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
24a7e14dcfSSatish Balay }
25a7e14dcfSSatish Balay 
26a7e14dcfSSatish Balay /*@C
27a7e14dcfSSatish Balay   TaoLineSearchInitializePackage - This function registers the line-search
28*20f4b53cSBarry Smith   algorithms in `Tao`.  When using shared or static libraries, this function is called from the
29*20f4b53cSBarry Smith   first entry to `TaoCreate()`; when using dynamic, it is called
308a690491SBarry Smith   from PetscDLLibraryRegister_tao()
31a7e14dcfSSatish Balay 
32a7e14dcfSSatish Balay   Level: developer
33a7e14dcfSSatish Balay 
34*20f4b53cSBarry Smith .seealso: `Tao`, `TaoLineSearch`, `TaoLineSearchCreate()`
35a7e14dcfSSatish Balay @*/
36d71ae5a4SJacob Faibussowitsch PetscErrorCode TaoLineSearchInitializePackage(void)
37d71ae5a4SJacob Faibussowitsch {
38a7e14dcfSSatish Balay   PetscFunctionBegin;
393ba16761SJacob Faibussowitsch   if (TaoLineSearchPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
40a7e14dcfSSatish Balay   TaoLineSearchPackageInitialized = PETSC_TRUE;
4146bdf8c8SLisandro Dalcin #if !defined(PETSC_USE_COMPLEX)
429566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("TaoLineSearch", &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