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