xref: /petsc/src/tao/interface/dlregistao.c (revision 65ba42b6ab3ec006bc8f22d89b4121d18fc8be1b)
1af0996ceSBarry Smith #include <petsc/private/taoimpl.h>
2a7e14dcfSSatish Balay 
3a7e14dcfSSatish Balay static PetscBool TaoPackageInitialized = PETSC_FALSE;
4a7e14dcfSSatish Balay 
5a7e14dcfSSatish Balay /*@C
6*65ba42b6SBarry Smith   TaoFinalizePackage - This function destroys everything in the PETSc/Tao
7*65ba42b6SBarry Smith   interface to the Tao package. It is called from `PetscFinalize()`.
8a7e14dcfSSatish Balay 
9a7e14dcfSSatish Balay   Level: developer
10a7e14dcfSSatish Balay @*/
11a7e14dcfSSatish Balay PetscErrorCode TaoFinalizePackage(void)
12a7e14dcfSSatish Balay {
13a7e14dcfSSatish Balay   PetscFunctionBegin;
149566063dSJacob Faibussowitsch   PetscCall(PetscFunctionListDestroy(&TaoList));
15a7e14dcfSSatish Balay   TaoPackageInitialized = PETSC_FALSE;
16a7e14dcfSSatish Balay   PetscFunctionReturn(0);
17a7e14dcfSSatish Balay }
18a7e14dcfSSatish Balay 
19a7e14dcfSSatish Balay /*@C
20441846f8SBarry Smith   TaoInitializePackage - This function sets up PETSc to use the Tao
218a690491SBarry Smith   package.  When using static or shared libraries, this function is called from the
22*65ba42b6SBarry Smith   first entry to `TaoCreate()`; when using shared or static libraries, it is called
238a690491SBarry Smith   from PetscDLLibraryRegister_tao()
24a7e14dcfSSatish Balay 
25a7e14dcfSSatish Balay   Level: developer
26a7e14dcfSSatish Balay 
27db781477SPatrick Sanan .seealso: `TaoCreate()`
28a7e14dcfSSatish Balay @*/
29600047eeSSatish Balay PetscErrorCode TaoInitializePackage(void)
30a7e14dcfSSatish Balay {
318e81d068SLisandro Dalcin   char           logList[256];
328e81d068SLisandro Dalcin   PetscBool      opt,pkg;
33a7e14dcfSSatish Balay 
34a7e14dcfSSatish Balay   PetscFunctionBegin;
35a7e14dcfSSatish Balay   if (TaoPackageInitialized) PetscFunctionReturn(0);
36a7e14dcfSSatish Balay   TaoPackageInitialized = PETSC_TRUE;
378e81d068SLisandro Dalcin   /* Register Classes */
389566063dSJacob Faibussowitsch   PetscCall(PetscClassIdRegister("Tao",&TAO_CLASSID));
398e81d068SLisandro Dalcin   /* Register Constructors */
409566063dSJacob Faibussowitsch   PetscCall(TaoRegisterAll());
418e81d068SLisandro Dalcin   /* Register Events */
429566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("TaoSolve",         TAO_CLASSID,&TAO_Solve));
439566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("TaoObjectiveEval", TAO_CLASSID,&TAO_ObjectiveEval));
449566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("TaoGradientEval",  TAO_CLASSID,&TAO_GradientEval));
459566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("TaoObjGradEval",   TAO_CLASSID,&TAO_ObjGradEval));
469566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("TaoHessianEval",   TAO_CLASSID,&TAO_HessianEval));
479566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("TaoConstrEval",    TAO_CLASSID,&TAO_ConstraintsEval));
489566063dSJacob Faibussowitsch   PetscCall(PetscLogEventRegister("TaoJacobianEval",  TAO_CLASSID,&TAO_JacobianEval));
49e94e781bSJacob Faibussowitsch   /* Process Info */
50e94e781bSJacob Faibussowitsch   {
51e94e781bSJacob Faibussowitsch     PetscClassId  classids[1];
52e94e781bSJacob Faibussowitsch 
53e94e781bSJacob Faibussowitsch     classids[0] = TAO_CLASSID;
549566063dSJacob Faibussowitsch     PetscCall(PetscInfoProcessClass("tao", 1, classids));
558e81d068SLisandro Dalcin   }
568e81d068SLisandro Dalcin   /* Process summary exclusions */
579566063dSJacob Faibussowitsch   PetscCall(PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt));
588e81d068SLisandro Dalcin   if (opt) {
599566063dSJacob Faibussowitsch     PetscCall(PetscStrInList("tao",logList,',',&pkg));
609566063dSJacob Faibussowitsch     if (pkg) PetscCall(PetscLogEventExcludeClass(TAO_CLASSID));
618e81d068SLisandro Dalcin   }
628e81d068SLisandro Dalcin   /* Register package finalizer */
639566063dSJacob Faibussowitsch   PetscCall(PetscRegisterFinalize(TaoFinalizePackage));
64a7e14dcfSSatish Balay   PetscFunctionReturn(0);
65a7e14dcfSSatish Balay }
66a7e14dcfSSatish Balay 
67a82e8c82SStefano Zampini #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
68a7e14dcfSSatish Balay /*
69a7e14dcfSSatish Balay   PetscDLLibraryRegister - this function is called when the dynamic library it
70a7e14dcfSSatish Balay   is in is opened.
71a7e14dcfSSatish Balay 
72441846f8SBarry Smith   This registers all of the Tao methods that are in the libtao
73a7e14dcfSSatish Balay   library.
74a7e14dcfSSatish Balay 
75a7e14dcfSSatish Balay   Input Parameter:
76a7e14dcfSSatish Balay . path - library path
77a7e14dcfSSatish Balay */
7860da17ecSBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petsctao(void)
79a7e14dcfSSatish Balay {
80a7e14dcfSSatish Balay   PetscFunctionBegin;
819566063dSJacob Faibussowitsch   PetscCall(TaoInitializePackage());
829566063dSJacob Faibussowitsch   PetscCall(TaoLineSearchInitializePackage());
83a7e14dcfSSatish Balay   PetscFunctionReturn(0);
84a7e14dcfSSatish Balay }
8560da17ecSBarry Smith #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
86