xref: /petsc/src/tao/linesearch/interface/dlregis_taolinesearch.c (revision 503c0ea9b45bcfbcebbb1ea5341243bbc69f0bea)
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(0);
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(0);
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(0);
52 }
53