xref: /petsc/src/tao/interface/dlregistao.c (revision 441846f8b2b1e3d12702032d495afa7e98f48493)
1*441846f8SBarry Smith #define TAO_DLL
2a7e14dcfSSatish Balay 
3ba92ff59SBarry Smith #include <petsc-private/taoimpl.h>
4aaa7dc30SBarry 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
12*441846f8SBarry Smith   interface to the Tao 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;
21*441846f8SBarry Smith   ierr = PetscFunctionListDestroy(&TaoList);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
29*441846f8SBarry Smith   TaoInitializePackage - This function sets up PETSc to use the Tao
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 
47*441846f8SBarry Smith   ierr = PetscClassIdRegister("Tao",&TAO_CLASSID);CHKERRQ(ierr);
48a7e14dcfSSatish Balay 
49a7e14dcfSSatish Balay   /* Tell PETSc what solvers are available */
50*441846f8SBarry Smith   ierr = TaoRegisterAll();CHKERRQ(ierr);
51a7e14dcfSSatish Balay 
52*441846f8SBarry Smith   /* Tell PETSc what events are associated with Tao */
53*441846f8SBarry Smith   ierr = PetscLogEventRegister("TaoSolve",TAO_CLASSID,&Tao_Solve);CHKERRQ(ierr);
54*441846f8SBarry Smith   ierr = PetscLogEventRegister("TaoObjectiveEval",TAO_CLASSID,&Tao_ObjectiveEval);CHKERRQ(ierr);
55*441846f8SBarry Smith   ierr = PetscLogEventRegister("TaoGradientEval",TAO_CLASSID,&Tao_GradientEval);CHKERRQ(ierr);
56*441846f8SBarry Smith   ierr = PetscLogEventRegister("TaoHessianEval",TAO_CLASSID,&Tao_HessianEval);CHKERRQ(ierr);
57*441846f8SBarry Smith   ierr = PetscLogEventRegister("TaoConstraintsEval",TAO_CLASSID,&Tao_ConstraintsEval);CHKERRQ(ierr);
58*441846f8SBarry Smith   ierr = PetscLogEventRegister("TaoJacobianEval",TAO_CLASSID,&Tao_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 
71*441846f8SBarry Smith   This registers all of the Tao methods that are in the libtao
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