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