xref: /petsc/src/tao/linesearch/interface/dlregis_taolinesearch.c (revision 07c2e4feb6773e78bda63e3a89d5b841667f9670)
1 #include <petsc/private/taolinesearchimpl.h>
2 
3 PETSC_EXTERN PetscErrorCode TaoLineSearchCreate_Unit(TaoLineSearch);
4 PETSC_EXTERN PetscErrorCode TaoLineSearchCreate_MT(TaoLineSearch);
5 PETSC_EXTERN PetscErrorCode TaoLineSearchCreate_GPCG(TaoLineSearch);
6 PETSC_EXTERN PetscErrorCode TaoLineSearchCreate_Armijo(TaoLineSearch);
7 PETSC_EXTERN PetscErrorCode TaoLineSearchCreate_OWArmijo(TaoLineSearch);
8 static PetscBool            TaoLineSearchPackageInitialized = PETSC_FALSE;
9 
10 /*@C
11   TaoLineSearchFinalizePackage - This function destroys everything in the `TaoLineSearch` package. It is called from `PetscFinalize()`.
12 
13   Level: developer
14 
15 .seealso: `Tao`, `TaoLineSearch`
16 @*/
TaoLineSearchFinalizePackage(void)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: `Tao`, `TaoLineSearch`, `TaoLineSearchCreate()`
34 @*/
TaoLineSearchInitializePackage(void)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(PetscInfoProcessClass("taolinesearch", 1, &TAOLINESEARCH_CLASSID));
43   PetscCall(TaoLineSearchRegister("unit", TaoLineSearchCreate_Unit));
44   PetscCall(TaoLineSearchRegister("more-thuente", TaoLineSearchCreate_MT));
45   PetscCall(TaoLineSearchRegister("gpcg", TaoLineSearchCreate_GPCG));
46   PetscCall(TaoLineSearchRegister("armijo", TaoLineSearchCreate_Armijo));
47   PetscCall(TaoLineSearchRegister("owarmijo", TaoLineSearchCreate_OWArmijo));
48   PetscCall(PetscLogEventRegister("TaoLSApply", TAOLINESEARCH_CLASSID, &TAOLINESEARCH_Apply));
49   PetscCall(PetscLogEventRegister("TaoLSEval", TAOLINESEARCH_CLASSID, &TAOLINESEARCH_Eval));
50 #endif
51   PetscCall(PetscRegisterFinalize(TaoLineSearchFinalizePackage));
52   PetscFunctionReturn(PETSC_SUCCESS);
53 }
54