xref: /petsc/src/tao/interface/dlregistao.c (revision e94e781be4d0de67afa8d29cbcd676556dbc0369)
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 
236285c0a3SHansol  Suh const char *const TaoADMMRegularizerTypes[] = {"REGULARIZER_USER","REGULARIZER_SOFT_THRESH","TaoADMMRegularizerType","TAO_ADMM_",0};
246285c0a3SHansol  Suh const char *const TaoADMMUpdateTypes[]      = {"UPDATE_BASIC","UPDATE_ADAPTIVE","UPDATE_ADAPTIVE_RELAXED","TaoADMMUpdateType","TAO_ADMM_",0};
25a7e14dcfSSatish Balay /*@C
26441846f8SBarry Smith   TaoInitializePackage - This function sets up PETSc to use the Tao
278a690491SBarry Smith   package.  When using static or shared libraries, this function is called from the
288a690491SBarry Smith   first entry to TaoCreate(); when using shared or static libraries, it is called
298a690491SBarry Smith   from PetscDLLibraryRegister_tao()
30a7e14dcfSSatish Balay 
31a7e14dcfSSatish Balay   Level: developer
32a7e14dcfSSatish Balay 
33a7e14dcfSSatish Balay .seealso: TaoCreate()
34a7e14dcfSSatish Balay @*/
35600047eeSSatish Balay PetscErrorCode TaoInitializePackage(void)
36a7e14dcfSSatish Balay {
378e81d068SLisandro Dalcin   char           logList[256];
388e81d068SLisandro Dalcin   PetscBool      opt,pkg;
39a7e14dcfSSatish Balay   PetscErrorCode ierr;
40a7e14dcfSSatish Balay 
41a7e14dcfSSatish Balay   PetscFunctionBegin;
42a7e14dcfSSatish Balay 
43a7e14dcfSSatish Balay   if (TaoPackageInitialized) PetscFunctionReturn(0);
44a7e14dcfSSatish Balay   TaoPackageInitialized = PETSC_TRUE;
458e81d068SLisandro Dalcin   /* Register Classes */
46441846f8SBarry Smith   ierr = PetscClassIdRegister("Tao",&TAO_CLASSID);CHKERRQ(ierr);
478e81d068SLisandro Dalcin   /* Register Constructors */
48441846f8SBarry Smith   ierr = TaoRegisterAll();CHKERRQ(ierr);
498e81d068SLisandro Dalcin   /* Register Events */
500ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoSolve",         TAO_CLASSID,&TAO_Solve);CHKERRQ(ierr);
510ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoObjectiveEval", TAO_CLASSID,&TAO_ObjectiveEval);CHKERRQ(ierr);
520ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoGradientEval",  TAO_CLASSID,&TAO_GradientEval);CHKERRQ(ierr);
530ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoObjGradEval",   TAO_CLASSID,&TAO_ObjGradEval);CHKERRQ(ierr);
540ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoHessianEval",   TAO_CLASSID,&TAO_HessianEval);CHKERRQ(ierr);
550ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoConstrEval",    TAO_CLASSID,&TAO_ConstraintsEval);CHKERRQ(ierr);
560ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoJacobianEval",  TAO_CLASSID,&TAO_JacobianEval);CHKERRQ(ierr);
57*e94e781bSJacob Faibussowitsch   /* Process Info */
58*e94e781bSJacob Faibussowitsch   {
59*e94e781bSJacob Faibussowitsch     PetscClassId  classids[1];
60*e94e781bSJacob Faibussowitsch 
61*e94e781bSJacob Faibussowitsch     classids[0] = TAO_CLASSID;
62*e94e781bSJacob Faibussowitsch     ierr = PetscInfoProcessClass("tao", 1, classids);CHKERRQ(ierr);
638e81d068SLisandro Dalcin   }
648e81d068SLisandro Dalcin   /* Process summary exclusions */
658e81d068SLisandro Dalcin   ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr);
668e81d068SLisandro Dalcin   if (opt) {
678e81d068SLisandro Dalcin     ierr = PetscStrInList("tao",logList,',',&pkg);CHKERRQ(ierr);
68fa2bb9feSLisandro Dalcin     if (pkg) {ierr = PetscLogEventExcludeClass(TAO_CLASSID);CHKERRQ(ierr);}
698e81d068SLisandro Dalcin   }
708e81d068SLisandro Dalcin   /* Register package finalizer */
71a7e14dcfSSatish Balay   ierr = PetscRegisterFinalize(TaoFinalizePackage);CHKERRQ(ierr);
72a7e14dcfSSatish Balay   PetscFunctionReturn(0);
73a7e14dcfSSatish Balay }
74a7e14dcfSSatish Balay 
75a7e14dcfSSatish Balay #ifdef PETSC_USE_DYNAMIC_LIBRARIES
76a7e14dcfSSatish Balay /*
77a7e14dcfSSatish Balay   PetscDLLibraryRegister - this function is called when the dynamic library it
78a7e14dcfSSatish Balay   is in is opened.
79a7e14dcfSSatish Balay 
80441846f8SBarry Smith   This registers all of the Tao methods that are in the libtao
81a7e14dcfSSatish Balay   library.
82a7e14dcfSSatish Balay 
83a7e14dcfSSatish Balay   Input Parameter:
84a7e14dcfSSatish Balay . path - library path
85a7e14dcfSSatish Balay */
86a7e14dcfSSatish Balay 
87a7e14dcfSSatish Balay PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_tao(void)
88a7e14dcfSSatish Balay {
89a7e14dcfSSatish Balay     PetscErrorCode ierr;
90a7e14dcfSSatish Balay 
91a7e14dcfSSatish Balay     PetscFunctionBegin;
92a7e14dcfSSatish Balay     ierr = TaoInitializePackage();CHKERRQ(ierr);
93a7e14dcfSSatish Balay     ierr = TaoLineSearchInitializePackage();CHKERRQ(ierr);
94a7e14dcfSSatish Balay     PetscFunctionReturn(0);
95a7e14dcfSSatish Balay }
96a7e14dcfSSatish Balay 
97a7e14dcfSSatish Balay #endif /* PETSC_USE_DYNAMIC_LIBRARIES */
98