xref: /petsc/src/tao/interface/dlregistao.c (revision 8e81d0682c925ac65a16095f60c998f9f3b7b642)
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
25a7e14dcfSSatish Balay   package.  When using static libraries, this function is called from the
26a7e14dcfSSatish Balay   first entry to TaoCreate(); when using shared libraries, it is called
27a7e14dcfSSatish Balay   from PetscDLLibraryRegister()
28a7e14dcfSSatish Balay 
29a7e14dcfSSatish Balay   Level: developer
30a7e14dcfSSatish Balay 
31a7e14dcfSSatish Balay .seealso: TaoCreate()
32a7e14dcfSSatish Balay @*/
33600047eeSSatish Balay PetscErrorCode TaoInitializePackage(void)
34a7e14dcfSSatish Balay {
35*8e81d068SLisandro Dalcin   char           logList[256];
36*8e81d068SLisandro Dalcin   PetscBool      opt,pkg;
37a7e14dcfSSatish Balay   PetscErrorCode ierr;
38a7e14dcfSSatish Balay 
39a7e14dcfSSatish Balay   PetscFunctionBegin;
40a7e14dcfSSatish Balay 
41a7e14dcfSSatish Balay   if (TaoPackageInitialized) PetscFunctionReturn(0);
42a7e14dcfSSatish Balay   TaoPackageInitialized = PETSC_TRUE;
43*8e81d068SLisandro Dalcin   /* Register Classes */
44441846f8SBarry Smith   ierr = PetscClassIdRegister("Tao",&TAO_CLASSID);CHKERRQ(ierr);
45*8e81d068SLisandro Dalcin   /* Register Constructors */
46441846f8SBarry Smith   ierr = TaoRegisterAll();CHKERRQ(ierr);
47*8e81d068SLisandro Dalcin   /* Register Events */
48441846f8SBarry Smith   ierr = PetscLogEventRegister("TaoSolve",TAO_CLASSID,&Tao_Solve);CHKERRQ(ierr);
49441846f8SBarry Smith   ierr = PetscLogEventRegister("TaoObjectiveEval",TAO_CLASSID,&Tao_ObjectiveEval);CHKERRQ(ierr);
50441846f8SBarry Smith   ierr = PetscLogEventRegister("TaoGradientEval",TAO_CLASSID,&Tao_GradientEval);CHKERRQ(ierr);
51441846f8SBarry Smith   ierr = PetscLogEventRegister("TaoHessianEval",TAO_CLASSID,&Tao_HessianEval);CHKERRQ(ierr);
52441846f8SBarry Smith   ierr = PetscLogEventRegister("TaoConstraintsEval",TAO_CLASSID,&Tao_ConstraintsEval);CHKERRQ(ierr);
53441846f8SBarry Smith   ierr = PetscLogEventRegister("TaoJacobianEval",TAO_CLASSID,&Tao_JacobianEval);CHKERRQ(ierr);
54*8e81d068SLisandro Dalcin   /* Process info exclusions */
55*8e81d068SLisandro Dalcin   ierr = PetscOptionsGetString(NULL,NULL,"-info_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr);
56*8e81d068SLisandro Dalcin   if (opt) {
57*8e81d068SLisandro Dalcin     ierr = PetscStrInList("tao",logList,',',&pkg);CHKERRQ(ierr);
58*8e81d068SLisandro Dalcin     if (pkg) {ierr = PetscInfoDeactivateClass(TAO_CLASSID);CHKERRQ(ierr);}
59*8e81d068SLisandro Dalcin   }
60*8e81d068SLisandro Dalcin   /* Process summary exclusions */
61*8e81d068SLisandro Dalcin   ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr);
62*8e81d068SLisandro Dalcin   if (opt) {
63*8e81d068SLisandro Dalcin     ierr = PetscStrInList("tao",logList,',',&pkg);CHKERRQ(ierr);
64*8e81d068SLisandro Dalcin     if (pkg) {ierr = PetscLogEventDeactivateClass(TAO_CLASSID);CHKERRQ(ierr);}
65*8e81d068SLisandro Dalcin   }
66*8e81d068SLisandro Dalcin   /* Register package finalizer */
67a7e14dcfSSatish Balay   ierr = PetscRegisterFinalize(TaoFinalizePackage);CHKERRQ(ierr);
68a7e14dcfSSatish Balay   PetscFunctionReturn(0);
69a7e14dcfSSatish Balay }
70a7e14dcfSSatish Balay 
71a7e14dcfSSatish Balay #ifdef PETSC_USE_DYNAMIC_LIBRARIES
72a7e14dcfSSatish Balay /*
73a7e14dcfSSatish Balay   PetscDLLibraryRegister - this function is called when the dynamic library it
74a7e14dcfSSatish Balay   is in is opened.
75a7e14dcfSSatish Balay 
76441846f8SBarry Smith   This registers all of the Tao methods that are in the libtao
77a7e14dcfSSatish Balay   library.
78a7e14dcfSSatish Balay 
79a7e14dcfSSatish Balay   Input Parameter:
80a7e14dcfSSatish Balay . path - library path
81a7e14dcfSSatish Balay */
82a7e14dcfSSatish Balay 
83a7e14dcfSSatish Balay PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_tao(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 }
92a7e14dcfSSatish Balay 
93a7e14dcfSSatish Balay #endif /* PETSC_USE_DYNAMIC_LIBRARIES */
94