xref: /petsc/src/tao/linesearch/interface/dlregis_taolinesearch.c (revision 58d68138c660dfb4e9f5b03334792cd4f2ffd7cc)
1 #define TAOLINESEARCH_DLL
2 #include <petsc/private/taolinesearchimpl.h>
3 
4 PETSC_EXTERN PetscErrorCode TaoLineSearchCreate_Unit(TaoLineSearch);
5 PETSC_EXTERN PetscErrorCode TaoLineSearchCreate_MT(TaoLineSearch);
6 PETSC_EXTERN PetscErrorCode TaoLineSearchCreate_GPCG(TaoLineSearch);
7 PETSC_EXTERN PetscErrorCode TaoLineSearchCreate_Armijo(TaoLineSearch);
8 PETSC_EXTERN PetscErrorCode TaoLineSearchCreate_OWArmijo(TaoLineSearch);
9 static PetscBool            TaoLineSearchPackageInitialized = PETSC_FALSE;
10 
11 /*@C
12   TaoLineSearchFinalizePackage - This function destroys everything in the PETSc/TAO
13   interface to the TaoLineSearch package. It is called from PetscFinalize().
14 
15   Level: developer
16 @*/
17 PetscErrorCode TaoLineSearchFinalizePackage(void) {
18   PetscFunctionBegin;
19   PetscCall(PetscFunctionListDestroy(&TaoLineSearchList));
20   TaoLineSearchPackageInitialized = PETSC_FALSE;
21   PetscFunctionReturn(0);
22 }
23 
24 /*@C
25   TaoLineSearchInitializePackage - This function registers the line-search
26   algorithms in TAO.  When using shared or static libraries, this function is called from the
27   first entry to TaoCreate(); when using dynamic, it is called
28   from PetscDLLibraryRegister_tao()
29 
30   Level: developer
31 
32 .seealso: `TaoLineSearchCreate()`
33 @*/
34 PetscErrorCode TaoLineSearchInitializePackage(void) {
35   PetscFunctionBegin;
36   if (TaoLineSearchPackageInitialized) PetscFunctionReturn(0);
37   TaoLineSearchPackageInitialized = PETSC_TRUE;
38 #if !defined(PETSC_USE_COMPLEX)
39   PetscCall(PetscClassIdRegister("TaoLineSearch", &TAOLINESEARCH_CLASSID));
40   PetscCall(TaoLineSearchRegister("unit", TaoLineSearchCreate_Unit));
41   PetscCall(TaoLineSearchRegister("more-thuente", TaoLineSearchCreate_MT));
42   PetscCall(TaoLineSearchRegister("gpcg", TaoLineSearchCreate_GPCG));
43   PetscCall(TaoLineSearchRegister("armijo", TaoLineSearchCreate_Armijo));
44   PetscCall(TaoLineSearchRegister("owarmijo", TaoLineSearchCreate_OWArmijo));
45   PetscCall(PetscLogEventRegister("TaoLSApply", TAOLINESEARCH_CLASSID, &TAOLINESEARCH_Apply));
46   PetscCall(PetscLogEventRegister("TaoLSEval", TAOLINESEARCH_CLASSID, &TAOLINESEARCH_Eval));
47 #endif
48   PetscCall(PetscRegisterFinalize(TaoLineSearchFinalizePackage));
49   PetscFunctionReturn(0);
50 }
51