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