1af0996ceSBarry Smith #include <petsc/private/taoimpl.h>
2a7e14dcfSSatish Balay
3a7e14dcfSSatish Balay static PetscBool TaoPackageInitialized = PETSC_FALSE;
4a7e14dcfSSatish Balay
5a7e14dcfSSatish Balay /*@C
665ba42b6SBarry Smith TaoFinalizePackage - This function destroys everything in the PETSc/Tao
765ba42b6SBarry Smith interface to the Tao package. It is called from `PetscFinalize()`.
8a7e14dcfSSatish Balay
9a7e14dcfSSatish Balay Level: developer
103b242c63SJacob Faibussowitsch
113b242c63SJacob Faibussowitsch .seealso: `TaoInitializePackage()`, `PetscFinalize()`, `TaoRegister()`, `TaoRegisterAll()`
12a7e14dcfSSatish Balay @*/
TaoFinalizePackage(void)13d71ae5a4SJacob Faibussowitsch PetscErrorCode TaoFinalizePackage(void)
14d71ae5a4SJacob Faibussowitsch {
15a7e14dcfSSatish Balay PetscFunctionBegin;
169566063dSJacob Faibussowitsch PetscCall(PetscFunctionListDestroy(&TaoList));
17a7e14dcfSSatish Balay TaoPackageInitialized = PETSC_FALSE;
183ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
19a7e14dcfSSatish Balay }
20a7e14dcfSSatish Balay
21a7e14dcfSSatish Balay /*@C
22441846f8SBarry Smith TaoInitializePackage - This function sets up PETSc to use the Tao
238a690491SBarry Smith package. When using static or shared libraries, this function is called from the
2465ba42b6SBarry Smith first entry to `TaoCreate()`; when using shared or static libraries, it is called
258a690491SBarry Smith from PetscDLLibraryRegister_tao()
26a7e14dcfSSatish Balay
27a7e14dcfSSatish Balay Level: developer
28a7e14dcfSSatish Balay
29*0b4b7b1cSBarry Smith Note:
30*0b4b7b1cSBarry Smith This function never needs to be called by PETSc users.
31*0b4b7b1cSBarry Smith
323b242c63SJacob Faibussowitsch .seealso: `TaoCreate()`, `TaoFinalizePackage()`, `TaoRegister()`, `TaoRegisterAll()`
33a7e14dcfSSatish Balay @*/
TaoInitializePackage(void)34d71ae5a4SJacob Faibussowitsch PetscErrorCode TaoInitializePackage(void)
35d71ae5a4SJacob Faibussowitsch {
368e81d068SLisandro Dalcin char logList[256];
378e81d068SLisandro Dalcin PetscBool opt, pkg;
38a7e14dcfSSatish Balay
39a7e14dcfSSatish Balay PetscFunctionBegin;
403ba16761SJacob Faibussowitsch if (TaoPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
41a7e14dcfSSatish Balay TaoPackageInitialized = PETSC_TRUE;
428e81d068SLisandro Dalcin /* Register Classes */
439566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("Tao", &TAO_CLASSID));
448e81d068SLisandro Dalcin /* Register Constructors */
459566063dSJacob Faibussowitsch PetscCall(TaoRegisterAll());
468e81d068SLisandro Dalcin /* Register Events */
479566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("TaoSolve", TAO_CLASSID, &TAO_Solve));
489566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("TaoObjectiveEval", TAO_CLASSID, &TAO_ObjectiveEval));
499566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("TaoGradientEval", TAO_CLASSID, &TAO_GradientEval));
509566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("TaoObjGradEval", TAO_CLASSID, &TAO_ObjGradEval));
519566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("TaoHessianEval", TAO_CLASSID, &TAO_HessianEval));
529566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("TaoConstrEval", TAO_CLASSID, &TAO_ConstraintsEval));
539566063dSJacob Faibussowitsch PetscCall(PetscLogEventRegister("TaoJacobianEval", TAO_CLASSID, &TAO_JacobianEval));
54e94e781bSJacob Faibussowitsch /* Process Info */
55e94e781bSJacob Faibussowitsch {
56e94e781bSJacob Faibussowitsch PetscClassId classids[1];
57e94e781bSJacob Faibussowitsch
58e94e781bSJacob Faibussowitsch classids[0] = TAO_CLASSID;
599566063dSJacob Faibussowitsch PetscCall(PetscInfoProcessClass("tao", 1, classids));
608e81d068SLisandro Dalcin }
618e81d068SLisandro Dalcin /* Process summary exclusions */
629566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
638e81d068SLisandro Dalcin if (opt) {
649566063dSJacob Faibussowitsch PetscCall(PetscStrInList("tao", logList, ',', &pkg));
659566063dSJacob Faibussowitsch if (pkg) PetscCall(PetscLogEventExcludeClass(TAO_CLASSID));
668e81d068SLisandro Dalcin }
678e81d068SLisandro Dalcin /* Register package finalizer */
689566063dSJacob Faibussowitsch PetscCall(PetscRegisterFinalize(TaoFinalizePackage));
693ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
70a7e14dcfSSatish Balay }
71a7e14dcfSSatish Balay
72a82e8c82SStefano Zampini #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
73a7e14dcfSSatish Balay /*
74a7e14dcfSSatish Balay PetscDLLibraryRegister - this function is called when the dynamic library it
75a7e14dcfSSatish Balay is in is opened.
76a7e14dcfSSatish Balay
77441846f8SBarry Smith This registers all of the Tao methods that are in the libtao
78a7e14dcfSSatish Balay library.
79a7e14dcfSSatish Balay
80a7e14dcfSSatish Balay Input Parameter:
81a7e14dcfSSatish Balay . path - library path
82a7e14dcfSSatish Balay */
PetscDLLibraryRegister_petsctao(void)83d71ae5a4SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petsctao(void)
84d71ae5a4SJacob Faibussowitsch {
85a7e14dcfSSatish Balay PetscFunctionBegin;
869566063dSJacob Faibussowitsch PetscCall(TaoInitializePackage());
879566063dSJacob Faibussowitsch PetscCall(TaoLineSearchInitializePackage());
883ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
89a7e14dcfSSatish Balay }
9060da17ecSBarry Smith #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
91