xref: /petsc/src/tao/interface/dlregistao.c (revision a82e8c82ed9474375a7f877f23dfa96948657643)
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
258a690491SBarry Smith   package.  When using static or shared libraries, this function is called from the
268a690491SBarry Smith   first entry to TaoCreate(); when using shared or static libraries, it is called
278a690491SBarry Smith   from PetscDLLibraryRegister_tao()
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   if (TaoPackageInitialized) PetscFunctionReturn(0);
41a7e14dcfSSatish Balay   TaoPackageInitialized = PETSC_TRUE;
428e81d068SLisandro Dalcin   /* Register Classes */
43441846f8SBarry Smith   ierr = PetscClassIdRegister("Tao",&TAO_CLASSID);CHKERRQ(ierr);
448e81d068SLisandro Dalcin   /* Register Constructors */
45441846f8SBarry Smith   ierr = TaoRegisterAll();CHKERRQ(ierr);
468e81d068SLisandro Dalcin   /* Register Events */
470ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoSolve",         TAO_CLASSID,&TAO_Solve);CHKERRQ(ierr);
480ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoObjectiveEval", TAO_CLASSID,&TAO_ObjectiveEval);CHKERRQ(ierr);
490ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoGradientEval",  TAO_CLASSID,&TAO_GradientEval);CHKERRQ(ierr);
500ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoObjGradEval",   TAO_CLASSID,&TAO_ObjGradEval);CHKERRQ(ierr);
510ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoHessianEval",   TAO_CLASSID,&TAO_HessianEval);CHKERRQ(ierr);
520ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoConstrEval",    TAO_CLASSID,&TAO_ConstraintsEval);CHKERRQ(ierr);
530ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoJacobianEval",  TAO_CLASSID,&TAO_JacobianEval);CHKERRQ(ierr);
54e94e781bSJacob Faibussowitsch   /* Process Info */
55e94e781bSJacob Faibussowitsch   {
56e94e781bSJacob Faibussowitsch     PetscClassId  classids[1];
57e94e781bSJacob Faibussowitsch 
58e94e781bSJacob Faibussowitsch     classids[0] = TAO_CLASSID;
59e94e781bSJacob Faibussowitsch     ierr = PetscInfoProcessClass("tao", 1, classids);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 
72*a82e8c82SStefano 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 */
8360da17ecSBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petsctao(void)
84a7e14dcfSSatish Balay {
85a7e14dcfSSatish Balay   PetscErrorCode ierr;
86a7e14dcfSSatish Balay 
87a7e14dcfSSatish Balay   PetscFunctionBegin;
88a7e14dcfSSatish Balay   ierr = TaoInitializePackage();CHKERRQ(ierr);
89a7e14dcfSSatish Balay   ierr = TaoLineSearchInitializePackage();CHKERRQ(ierr);
90a7e14dcfSSatish Balay   PetscFunctionReturn(0);
91a7e14dcfSSatish Balay }
9260da17ecSBarry Smith #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
93