xref: /petsc/src/tao/interface/dlregistao.c (revision 3b242c63a61a24772ddcbef0184194118b38a8e4)
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
10*3b242c63SJacob Faibussowitsch 
11*3b242c63SJacob Faibussowitsch .seealso: `TaoInitializePackage()`, `PetscFinalize()`, `TaoRegister()`, `TaoRegisterAll()`
12a7e14dcfSSatish Balay @*/
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*3b242c63SJacob Faibussowitsch .seealso: `TaoCreate()`, `TaoFinalizePackage()`, `TaoRegister()`, `TaoRegisterAll()`
30a7e14dcfSSatish Balay @*/
31d71ae5a4SJacob Faibussowitsch PetscErrorCode TaoInitializePackage(void)
32d71ae5a4SJacob Faibussowitsch {
338e81d068SLisandro Dalcin   char      logList[256];
348e81d068SLisandro Dalcin   PetscBool opt, pkg;
35a7e14dcfSSatish Balay 
36a7e14dcfSSatish Balay   PetscFunctionBegin;
373ba16761SJacob Faibussowitsch   if (TaoPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
38a7e14dcfSSatish Balay   TaoPackageInitialized = PETSC_TRUE;
398e81d068SLisandro Dalcin   /* Register Classes */
409566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Tao", &TAO_CLASSID));
418e81d068SLisandro Dalcin   /* Register Constructors */
429566063dSJacob Faibussowitsch   PetscCall(TaoRegisterAll());
438e81d068SLisandro Dalcin   /* Register Events */
449566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("TaoSolve", TAO_CLASSID, &TAO_Solve));
459566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("TaoObjectiveEval", TAO_CLASSID, &TAO_ObjectiveEval));
469566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("TaoGradientEval", TAO_CLASSID, &TAO_GradientEval));
479566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("TaoObjGradEval", TAO_CLASSID, &TAO_ObjGradEval));
489566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("TaoHessianEval", TAO_CLASSID, &TAO_HessianEval));
499566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("TaoConstrEval", TAO_CLASSID, &TAO_ConstraintsEval));
509566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("TaoJacobianEval", TAO_CLASSID, &TAO_JacobianEval));
51e94e781bSJacob Faibussowitsch   /* Process Info */
52e94e781bSJacob Faibussowitsch   {
53e94e781bSJacob Faibussowitsch     PetscClassId classids[1];
54e94e781bSJacob Faibussowitsch 
55e94e781bSJacob Faibussowitsch     classids[0] = TAO_CLASSID;
569566063dSJacob Faibussowitsch     PetscCall(PetscInfoProcessClass("tao", 1, classids));
578e81d068SLisandro Dalcin   }
588e81d068SLisandro Dalcin   /* Process summary exclusions */
599566063dSJacob Faibussowitsch   PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
608e81d068SLisandro Dalcin   if (opt) {
619566063dSJacob Faibussowitsch     PetscCall(PetscStrInList("tao", logList, ',', &pkg));
629566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(TAO_CLASSID));
638e81d068SLisandro Dalcin   }
648e81d068SLisandro Dalcin   /* Register package finalizer */
659566063dSJacob Faibussowitsch   PetscCall(PetscRegisterFinalize(TaoFinalizePackage));
663ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
67a7e14dcfSSatish Balay }
68a7e14dcfSSatish Balay 
69a82e8c82SStefano Zampini #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
70a7e14dcfSSatish Balay /*
71a7e14dcfSSatish Balay   PetscDLLibraryRegister - this function is called when the dynamic library it
72a7e14dcfSSatish Balay   is in is opened.
73a7e14dcfSSatish Balay 
74441846f8SBarry Smith   This registers all of the Tao methods that are in the libtao
75a7e14dcfSSatish Balay   library.
76a7e14dcfSSatish Balay 
77a7e14dcfSSatish Balay   Input Parameter:
78a7e14dcfSSatish Balay . path - library path
79a7e14dcfSSatish Balay */
80d71ae5a4SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petsctao(void)
81d71ae5a4SJacob Faibussowitsch {
82a7e14dcfSSatish Balay   PetscFunctionBegin;
839566063dSJacob Faibussowitsch   PetscCall(TaoInitializePackage());
849566063dSJacob Faibussowitsch   PetscCall(TaoLineSearchInitializePackage());
853ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
86a7e14dcfSSatish Balay }
8760da17ecSBarry Smith #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
88