xref: /petsc/src/tao/linesearch/interface/dlregis_taolinesearch.c (revision b75c6efc21bfcba5897c8ca359bc3d0e82c122c1)
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 {
19   PetscFunctionBegin;
20   PetscCall(PetscFunctionListDestroy(&TaoLineSearchList));
21   TaoLineSearchPackageInitialized = PETSC_FALSE;
22   PetscFunctionReturn(PETSC_SUCCESS);
23 }
24 
25 /*@C
26   TaoLineSearchInitializePackage - This function registers the line-search
27   algorithms in TAO.  When using shared or static libraries, this function is called from the
28   first entry to TaoCreate(); when using dynamic, it is called
29   from PetscDLLibraryRegister_tao()
30 
31   Level: developer
32 
33 .seealso: `TaoLineSearchCreate()`
34 @*/
35 PetscErrorCode TaoLineSearchInitializePackage(void)
36 {
37   PetscFunctionBegin;
38   if (TaoLineSearchPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
39   TaoLineSearchPackageInitialized = PETSC_TRUE;
40 #if !defined(PETSC_USE_COMPLEX)
41   PetscCall(PetscClassIdRegister("TaoLineSearch", &TAOLINESEARCH_CLASSID));
42   PetscCall(TaoLineSearchRegister("unit", TaoLineSearchCreate_Unit));
43   PetscCall(TaoLineSearchRegister("more-thuente", TaoLineSearchCreate_MT));
44   PetscCall(TaoLineSearchRegister("gpcg", TaoLineSearchCreate_GPCG));
45   PetscCall(TaoLineSearchRegister("armijo", TaoLineSearchCreate_Armijo));
46   PetscCall(TaoLineSearchRegister("owarmijo", TaoLineSearchCreate_OWArmijo));
47   PetscCall(PetscLogEventRegister("TaoLSApply", TAOLINESEARCH_CLASSID, &TAOLINESEARCH_Apply));
48   PetscCall(PetscLogEventRegister("TaoLSEval", TAOLINESEARCH_CLASSID, &TAOLINESEARCH_Eval));
49 #endif
50   PetscCall(PetscRegisterFinalize(TaoLineSearchFinalizePackage));
51   PetscFunctionReturn(PETSC_SUCCESS);
52 }
53