xref: /petsc/src/tao/linesearch/interface/dlregis_taolinesearch.c (revision 3ba1676111f5c958fe6c2729b46ca4d523958bb3)
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