xref: /petsc/src/tao/linesearch/interface/dlregis_taolinesearch.c (revision db7814771ca77b190574494e87b584e981451db0)
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 @*/
17a7e14dcfSSatish Balay PetscErrorCode TaoLineSearchFinalizePackage(void)
18a7e14dcfSSatish Balay {
19a7e14dcfSSatish Balay   PetscFunctionBegin;
209566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&TaoLineSearchList));
21a7e14dcfSSatish Balay   TaoLineSearchPackageInitialized = PETSC_FALSE;
22a7e14dcfSSatish Balay   PetscFunctionReturn(0);
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 
33*db781477SPatrick Sanan .seealso: `TaoLineSearchCreate()`
34a7e14dcfSSatish Balay @*/
35600047eeSSatish Balay PetscErrorCode TaoLineSearchInitializePackage(void)
36a7e14dcfSSatish Balay {
37a7e14dcfSSatish Balay   PetscFunctionBegin;
38a7e14dcfSSatish Balay   if (TaoLineSearchPackageInitialized) PetscFunctionReturn(0);
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));
51a7e14dcfSSatish Balay   PetscFunctionReturn(0);
52a7e14dcfSSatish Balay }
53