xref: /petsc/src/tao/interface/dlregistao.c (revision a7e14dcfba0d07adf6226a919460249440ec94c7)
1*a7e14dcfSSatish Balay #define TAOSOLVER_DLL
2*a7e14dcfSSatish Balay 
3*a7e14dcfSSatish Balay #include "tao-private/taosolver_impl.h"
4*a7e14dcfSSatish Balay #include "tao-private/taodm_impl.h"
5*a7e14dcfSSatish Balay 
6*a7e14dcfSSatish Balay static PetscBool TaoPackageInitialized = PETSC_FALSE;
7*a7e14dcfSSatish Balay 
8*a7e14dcfSSatish Balay #undef __FUNCT__
9*a7e14dcfSSatish Balay #define __FUNCT__ "TaoFinalizePackage"
10*a7e14dcfSSatish Balay /*@C
11*a7e14dcfSSatish Balay   TaoFinalizePackage - This function destroys everything in the PETSc/TAO
12*a7e14dcfSSatish Balay   interface to the TaoSolver package. It is called from PetscFinalize().
13*a7e14dcfSSatish Balay 
14*a7e14dcfSSatish Balay   Level: developer
15*a7e14dcfSSatish Balay @*/
16*a7e14dcfSSatish Balay PetscErrorCode TaoFinalizePackage(void)
17*a7e14dcfSSatish Balay {
18*a7e14dcfSSatish Balay   PetscErrorCode ierr;
19*a7e14dcfSSatish Balay 
20*a7e14dcfSSatish Balay   PetscFunctionBegin;
21*a7e14dcfSSatish Balay   ierr = PetscFunctionListDestroy(&TaoSolverList); CHKERRQ(ierr);
22*a7e14dcfSSatish Balay   TaoPackageInitialized = PETSC_FALSE;
23*a7e14dcfSSatish Balay   PetscFunctionReturn(0);
24*a7e14dcfSSatish Balay }
25*a7e14dcfSSatish Balay 
26*a7e14dcfSSatish Balay #undef __FUNCT__
27*a7e14dcfSSatish Balay #define __FUNCT__ "TaoInitializePackage"
28*a7e14dcfSSatish Balay /*@C
29*a7e14dcfSSatish Balay   TaoInitializePackage - This function sets up PETSc to use the TaoSolver
30*a7e14dcfSSatish Balay   package.  When using static libraries, this function is called from the
31*a7e14dcfSSatish Balay   first entry to TaoCreate(); when using shared libraries, it is called
32*a7e14dcfSSatish Balay   from PetscDLLibraryRegister()
33*a7e14dcfSSatish Balay 
34*a7e14dcfSSatish Balay   Level: developer
35*a7e14dcfSSatish Balay 
36*a7e14dcfSSatish Balay .seealso: TaoCreate()
37*a7e14dcfSSatish Balay @*/
38*a7e14dcfSSatish Balay PetscErrorCode TaoInitializePackage()
39*a7e14dcfSSatish Balay {
40*a7e14dcfSSatish Balay   PetscErrorCode ierr;
41*a7e14dcfSSatish Balay 
42*a7e14dcfSSatish Balay   PetscFunctionBegin;
43*a7e14dcfSSatish Balay 
44*a7e14dcfSSatish Balay   if (TaoPackageInitialized) PetscFunctionReturn(0);
45*a7e14dcfSSatish Balay   TaoPackageInitialized = PETSC_TRUE;
46*a7e14dcfSSatish Balay 
47*a7e14dcfSSatish Balay   ierr = PetscClassIdRegister("TaoSolver",&TAOSOLVER_CLASSID); CHKERRQ(ierr);
48*a7e14dcfSSatish Balay 
49*a7e14dcfSSatish Balay   /* Tell PETSc what solvers are available */
50*a7e14dcfSSatish Balay   ierr = TaoSolverRegisterAll(); CHKERRQ(ierr);
51*a7e14dcfSSatish Balay 
52*a7e14dcfSSatish Balay   /* Tell PETSc what events are associated with TaoSolver */
53*a7e14dcfSSatish Balay   ierr = PetscLogEventRegister("TaoSolve",TAOSOLVER_CLASSID,&TaoSolver_Solve); CHKERRQ(ierr);
54*a7e14dcfSSatish Balay   ierr = PetscLogEventRegister("TaoObjectiveEval",TAOSOLVER_CLASSID,&TaoSolver_ObjectiveEval); CHKERRQ(ierr);
55*a7e14dcfSSatish Balay   ierr = PetscLogEventRegister("TaoGradientEval",TAOSOLVER_CLASSID,&TaoSolver_GradientEval); CHKERRQ(ierr);
56*a7e14dcfSSatish Balay   ierr = PetscLogEventRegister("TaoHessianEval",TAOSOLVER_CLASSID,&TaoSolver_HessianEval); CHKERRQ(ierr);
57*a7e14dcfSSatish Balay   ierr = PetscLogEventRegister("TaoConstraintsEval",TAOSOLVER_CLASSID,&TaoSolver_ConstraintsEval); CHKERRQ(ierr);
58*a7e14dcfSSatish Balay   ierr = PetscLogEventRegister("TaoJacobianEval",TAOSOLVER_CLASSID,&TaoSolver_JacobianEval); CHKERRQ(ierr);
59*a7e14dcfSSatish Balay 
60*a7e14dcfSSatish Balay   ierr = PetscRegisterFinalize(TaoFinalizePackage); CHKERRQ(ierr);
61*a7e14dcfSSatish Balay   PetscFunctionReturn(0);
62*a7e14dcfSSatish Balay }
63*a7e14dcfSSatish Balay 
64*a7e14dcfSSatish Balay #ifdef PETSC_USE_DYNAMIC_LIBRARIES
65*a7e14dcfSSatish Balay #undef __FUNCT__
66*a7e14dcfSSatish Balay #define __FUNCT__ "PetscDLLibraryRegister_tao"
67*a7e14dcfSSatish Balay /*
68*a7e14dcfSSatish Balay   PetscDLLibraryRegister - this function is called when the dynamic library it
69*a7e14dcfSSatish Balay   is in is opened.
70*a7e14dcfSSatish Balay 
71*a7e14dcfSSatish Balay   This registers all of the TaoSolver methods that are in the libtaosolver
72*a7e14dcfSSatish Balay   library.
73*a7e14dcfSSatish Balay 
74*a7e14dcfSSatish Balay   Input Parameter:
75*a7e14dcfSSatish Balay . path - library path
76*a7e14dcfSSatish Balay */
77*a7e14dcfSSatish Balay 
78*a7e14dcfSSatish Balay PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_tao(void)
79*a7e14dcfSSatish Balay {
80*a7e14dcfSSatish Balay     PetscErrorCode ierr;
81*a7e14dcfSSatish Balay 
82*a7e14dcfSSatish Balay     PetscFunctionBegin;
83*a7e14dcfSSatish Balay     ierr = TaoInitializePackage(); CHKERRQ(ierr);
84*a7e14dcfSSatish Balay     ierr = TaoLineSearchInitializePackage(); CHKERRQ(ierr);
85*a7e14dcfSSatish Balay     PetscFunctionReturn(0);
86*a7e14dcfSSatish Balay }
87*a7e14dcfSSatish Balay 
88*a7e14dcfSSatish Balay #endif /* PETSC_USE_DYNAMIC_LIBRARIES */
89