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 @*/ 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 @*/ 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