xref: /petsc/src/tao/interface/dlregistao.c (revision af0996ce37bc06907c37d8d91773840993d61e62)
1441846f8SBarry Smith #define TAO_DLL
2a7e14dcfSSatish Balay 
3*af0996ceSBarry Smith #include <petsc/private/taoimpl.h>
4a7e14dcfSSatish Balay 
5a7e14dcfSSatish Balay static PetscBool TaoPackageInitialized = PETSC_FALSE;
6a7e14dcfSSatish Balay 
7a7e14dcfSSatish Balay #undef __FUNCT__
8a7e14dcfSSatish Balay #define __FUNCT__ "TaoFinalizePackage"
9a7e14dcfSSatish Balay /*@C
10a7e14dcfSSatish Balay   TaoFinalizePackage - This function destroys everything in the PETSc/TAO
11441846f8SBarry Smith   interface to the Tao package. It is called from PetscFinalize().
12a7e14dcfSSatish Balay 
13a7e14dcfSSatish Balay   Level: developer
14a7e14dcfSSatish Balay @*/
15a7e14dcfSSatish Balay PetscErrorCode TaoFinalizePackage(void)
16a7e14dcfSSatish Balay {
17a7e14dcfSSatish Balay   PetscErrorCode ierr;
18a7e14dcfSSatish Balay 
19a7e14dcfSSatish Balay   PetscFunctionBegin;
20441846f8SBarry Smith   ierr = PetscFunctionListDestroy(&TaoList);CHKERRQ(ierr);
21a7e14dcfSSatish Balay   TaoPackageInitialized = PETSC_FALSE;
22a7e14dcfSSatish Balay   PetscFunctionReturn(0);
23a7e14dcfSSatish Balay }
24a7e14dcfSSatish Balay 
25a7e14dcfSSatish Balay #undef __FUNCT__
26a7e14dcfSSatish Balay #define __FUNCT__ "TaoInitializePackage"
27a7e14dcfSSatish Balay /*@C
28441846f8SBarry Smith   TaoInitializePackage - This function sets up PETSc to use the Tao
29a7e14dcfSSatish Balay   package.  When using static libraries, this function is called from the
30a7e14dcfSSatish Balay   first entry to TaoCreate(); when using shared libraries, it is called
31a7e14dcfSSatish Balay   from PetscDLLibraryRegister()
32a7e14dcfSSatish Balay 
33a7e14dcfSSatish Balay   Level: developer
34a7e14dcfSSatish Balay 
35a7e14dcfSSatish Balay .seealso: TaoCreate()
36a7e14dcfSSatish Balay @*/
37600047eeSSatish Balay PetscErrorCode TaoInitializePackage(void)
38a7e14dcfSSatish Balay {
39a7e14dcfSSatish Balay   PetscErrorCode ierr;
40a7e14dcfSSatish Balay 
41a7e14dcfSSatish Balay   PetscFunctionBegin;
42a7e14dcfSSatish Balay 
43a7e14dcfSSatish Balay   if (TaoPackageInitialized) PetscFunctionReturn(0);
44a7e14dcfSSatish Balay   TaoPackageInitialized = PETSC_TRUE;
45a7e14dcfSSatish Balay 
46441846f8SBarry Smith   ierr = PetscClassIdRegister("Tao",&TAO_CLASSID);CHKERRQ(ierr);
47a7e14dcfSSatish Balay 
48a7e14dcfSSatish Balay   /* Tell PETSc what solvers are available */
49441846f8SBarry Smith   ierr = TaoRegisterAll();CHKERRQ(ierr);
50a7e14dcfSSatish Balay 
51441846f8SBarry Smith   /* Tell PETSc what events are associated with Tao */
52441846f8SBarry Smith   ierr = PetscLogEventRegister("TaoSolve",TAO_CLASSID,&Tao_Solve);CHKERRQ(ierr);
53441846f8SBarry Smith   ierr = PetscLogEventRegister("TaoObjectiveEval",TAO_CLASSID,&Tao_ObjectiveEval);CHKERRQ(ierr);
54441846f8SBarry Smith   ierr = PetscLogEventRegister("TaoGradientEval",TAO_CLASSID,&Tao_GradientEval);CHKERRQ(ierr);
55441846f8SBarry Smith   ierr = PetscLogEventRegister("TaoHessianEval",TAO_CLASSID,&Tao_HessianEval);CHKERRQ(ierr);
56441846f8SBarry Smith   ierr = PetscLogEventRegister("TaoConstraintsEval",TAO_CLASSID,&Tao_ConstraintsEval);CHKERRQ(ierr);
57441846f8SBarry Smith   ierr = PetscLogEventRegister("TaoJacobianEval",TAO_CLASSID,&Tao_JacobianEval);CHKERRQ(ierr);
58a7e14dcfSSatish Balay 
59a7e14dcfSSatish Balay   ierr = PetscRegisterFinalize(TaoFinalizePackage);CHKERRQ(ierr);
60a7e14dcfSSatish Balay   PetscFunctionReturn(0);
61a7e14dcfSSatish Balay }
62a7e14dcfSSatish Balay 
63a7e14dcfSSatish Balay #ifdef PETSC_USE_DYNAMIC_LIBRARIES
64a7e14dcfSSatish Balay #undef __FUNCT__
65a7e14dcfSSatish Balay #define __FUNCT__ "PetscDLLibraryRegister_tao"
66a7e14dcfSSatish Balay /*
67a7e14dcfSSatish Balay   PetscDLLibraryRegister - this function is called when the dynamic library it
68a7e14dcfSSatish Balay   is in is opened.
69a7e14dcfSSatish Balay 
70441846f8SBarry Smith   This registers all of the Tao methods that are in the libtao
71a7e14dcfSSatish Balay   library.
72a7e14dcfSSatish Balay 
73a7e14dcfSSatish Balay   Input Parameter:
74a7e14dcfSSatish Balay . path - library path
75a7e14dcfSSatish Balay */
76a7e14dcfSSatish Balay 
77a7e14dcfSSatish Balay PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_tao(void)
78a7e14dcfSSatish Balay {
79a7e14dcfSSatish Balay     PetscErrorCode ierr;
80a7e14dcfSSatish Balay 
81a7e14dcfSSatish Balay     PetscFunctionBegin;
82a7e14dcfSSatish Balay     ierr = TaoInitializePackage();CHKERRQ(ierr);
83a7e14dcfSSatish Balay     ierr = TaoLineSearchInitializePackage();CHKERRQ(ierr);
84a7e14dcfSSatish Balay     PetscFunctionReturn(0);
85a7e14dcfSSatish Balay }
86a7e14dcfSSatish Balay 
87a7e14dcfSSatish Balay #endif /* PETSC_USE_DYNAMIC_LIBRARIES */
88