xref: /petsc/src/tao/interface/dlregistao.c (revision 0ebee16d61c2e067d90b4647dd39d0134a8a2601)
1441846f8SBarry Smith #define TAO_DLL
2a7e14dcfSSatish Balay 
3af0996ceSBarry Smith #include <petsc/private/taoimpl.h>
4a7e14dcfSSatish Balay 
5a7e14dcfSSatish Balay static PetscBool TaoPackageInitialized = PETSC_FALSE;
6a7e14dcfSSatish Balay 
7a7e14dcfSSatish Balay /*@C
8a7e14dcfSSatish Balay   TaoFinalizePackage - This function destroys everything in the PETSc/TAO
9441846f8SBarry Smith   interface to the Tao package. It is called from PetscFinalize().
10a7e14dcfSSatish Balay 
11a7e14dcfSSatish Balay   Level: developer
12a7e14dcfSSatish Balay @*/
13a7e14dcfSSatish Balay PetscErrorCode TaoFinalizePackage(void)
14a7e14dcfSSatish Balay {
15a7e14dcfSSatish Balay   PetscErrorCode ierr;
16a7e14dcfSSatish Balay 
17a7e14dcfSSatish Balay   PetscFunctionBegin;
18441846f8SBarry Smith   ierr = PetscFunctionListDestroy(&TaoList);CHKERRQ(ierr);
19a7e14dcfSSatish Balay   TaoPackageInitialized = PETSC_FALSE;
20a7e14dcfSSatish Balay   PetscFunctionReturn(0);
21a7e14dcfSSatish Balay }
22a7e14dcfSSatish Balay 
23a7e14dcfSSatish Balay /*@C
24441846f8SBarry Smith   TaoInitializePackage - This function sets up PETSc to use the Tao
25a7e14dcfSSatish Balay   package.  When using static libraries, this function is called from the
26a7e14dcfSSatish Balay   first entry to TaoCreate(); when using shared libraries, it is called
27a7e14dcfSSatish Balay   from PetscDLLibraryRegister()
28a7e14dcfSSatish Balay 
29a7e14dcfSSatish Balay   Level: developer
30a7e14dcfSSatish Balay 
31a7e14dcfSSatish Balay .seealso: TaoCreate()
32a7e14dcfSSatish Balay @*/
33600047eeSSatish Balay PetscErrorCode TaoInitializePackage(void)
34a7e14dcfSSatish Balay {
358e81d068SLisandro Dalcin   char           logList[256];
368e81d068SLisandro Dalcin   PetscBool      opt,pkg;
37a7e14dcfSSatish Balay   PetscErrorCode ierr;
38a7e14dcfSSatish Balay 
39a7e14dcfSSatish Balay   PetscFunctionBegin;
40a7e14dcfSSatish Balay 
41a7e14dcfSSatish Balay   if (TaoPackageInitialized) PetscFunctionReturn(0);
42a7e14dcfSSatish Balay   TaoPackageInitialized = PETSC_TRUE;
438e81d068SLisandro Dalcin   /* Register Classes */
44441846f8SBarry Smith   ierr = PetscClassIdRegister("Tao",&TAO_CLASSID);CHKERRQ(ierr);
458e81d068SLisandro Dalcin   /* Register Constructors */
46441846f8SBarry Smith   ierr = TaoRegisterAll();CHKERRQ(ierr);
478e81d068SLisandro Dalcin   /* Register Events */
48*0ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoSolve",         TAO_CLASSID,&TAO_Solve);CHKERRQ(ierr);
49*0ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoObjectiveEval", TAO_CLASSID,&TAO_ObjectiveEval);CHKERRQ(ierr);
50*0ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoGradientEval",  TAO_CLASSID,&TAO_GradientEval);CHKERRQ(ierr);
51*0ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoObjGradEval",   TAO_CLASSID,&TAO_ObjGradEval);CHKERRQ(ierr);
52*0ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoHessianEval",   TAO_CLASSID,&TAO_HessianEval);CHKERRQ(ierr);
53*0ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoConstrEval",    TAO_CLASSID,&TAO_ConstraintsEval);CHKERRQ(ierr);
54*0ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoJacobianEval",  TAO_CLASSID,&TAO_JacobianEval);CHKERRQ(ierr);
558e81d068SLisandro Dalcin   /* Process info exclusions */
568e81d068SLisandro Dalcin   ierr = PetscOptionsGetString(NULL,NULL,"-info_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr);
578e81d068SLisandro Dalcin   if (opt) {
588e81d068SLisandro Dalcin     ierr = PetscStrInList("tao",logList,',',&pkg);CHKERRQ(ierr);
598e81d068SLisandro Dalcin     if (pkg) {ierr = PetscInfoDeactivateClass(TAO_CLASSID);CHKERRQ(ierr);}
608e81d068SLisandro Dalcin   }
618e81d068SLisandro Dalcin   /* Process summary exclusions */
628e81d068SLisandro Dalcin   ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr);
638e81d068SLisandro Dalcin   if (opt) {
648e81d068SLisandro Dalcin     ierr = PetscStrInList("tao",logList,',',&pkg);CHKERRQ(ierr);
65fa2bb9feSLisandro Dalcin     if (pkg) {ierr = PetscLogEventExcludeClass(TAO_CLASSID);CHKERRQ(ierr);}
668e81d068SLisandro Dalcin   }
678e81d068SLisandro Dalcin   /* Register package finalizer */
68a7e14dcfSSatish Balay   ierr = PetscRegisterFinalize(TaoFinalizePackage);CHKERRQ(ierr);
69a7e14dcfSSatish Balay   PetscFunctionReturn(0);
70a7e14dcfSSatish Balay }
71a7e14dcfSSatish Balay 
72a7e14dcfSSatish Balay #ifdef PETSC_USE_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 */
83a7e14dcfSSatish Balay 
84a7e14dcfSSatish Balay PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_tao(void)
85a7e14dcfSSatish Balay {
86a7e14dcfSSatish Balay     PetscErrorCode ierr;
87a7e14dcfSSatish Balay 
88a7e14dcfSSatish Balay     PetscFunctionBegin;
89a7e14dcfSSatish Balay     ierr = TaoInitializePackage();CHKERRQ(ierr);
90a7e14dcfSSatish Balay     ierr = TaoLineSearchInitializePackage();CHKERRQ(ierr);
91a7e14dcfSSatish Balay     PetscFunctionReturn(0);
92a7e14dcfSSatish Balay }
93a7e14dcfSSatish Balay 
94a7e14dcfSSatish Balay #endif /* PETSC_USE_DYNAMIC_LIBRARIES */
95