xref: /petsc/src/tao/interface/dlregistao.c (revision 60da17ec39af736fa870f8b3e3b0a4b951a26ca0)
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 
2383c8fe1dSLisandro Dalcin const char *const TaoADMMRegularizerTypes[] = {"REGULARIZER_USER","REGULARIZER_SOFT_THRESH","TaoADMMRegularizerType","TAO_ADMM_",NULL};
2483c8fe1dSLisandro Dalcin const char *const TaoADMMUpdateTypes[]      = {"UPDATE_BASIC","UPDATE_ADAPTIVE","UPDATE_ADAPTIVE_RELAXED","TaoADMMUpdateType","TAO_ADMM_",NULL};
25661095bbSAlp Dener const char *const TaoALMMTypes[]            = {"CLASSIC","PHR","TaoALMMType","TAO_ALMM_",NULL};
26a7e14dcfSSatish Balay /*@C
27441846f8SBarry Smith   TaoInitializePackage - This function sets up PETSc to use the Tao
288a690491SBarry Smith   package.  When using static or shared libraries, this function is called from the
298a690491SBarry Smith   first entry to TaoCreate(); when using shared or static libraries, it is called
308a690491SBarry Smith   from PetscDLLibraryRegister_tao()
31a7e14dcfSSatish Balay 
32a7e14dcfSSatish Balay   Level: developer
33a7e14dcfSSatish Balay 
34a7e14dcfSSatish Balay .seealso: TaoCreate()
35a7e14dcfSSatish Balay @*/
36600047eeSSatish Balay PetscErrorCode TaoInitializePackage(void)
37a7e14dcfSSatish Balay {
388e81d068SLisandro Dalcin   char           logList[256];
398e81d068SLisandro Dalcin   PetscBool      opt,pkg;
40a7e14dcfSSatish Balay   PetscErrorCode ierr;
41a7e14dcfSSatish Balay 
42a7e14dcfSSatish Balay   PetscFunctionBegin;
43a7e14dcfSSatish Balay 
44a7e14dcfSSatish Balay   if (TaoPackageInitialized) PetscFunctionReturn(0);
45a7e14dcfSSatish Balay   TaoPackageInitialized = PETSC_TRUE;
468e81d068SLisandro Dalcin   /* Register Classes */
47441846f8SBarry Smith   ierr = PetscClassIdRegister("Tao",&TAO_CLASSID);CHKERRQ(ierr);
488e81d068SLisandro Dalcin   /* Register Constructors */
49441846f8SBarry Smith   ierr = TaoRegisterAll();CHKERRQ(ierr);
508e81d068SLisandro Dalcin   /* Register Events */
510ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoSolve",         TAO_CLASSID,&TAO_Solve);CHKERRQ(ierr);
520ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoObjectiveEval", TAO_CLASSID,&TAO_ObjectiveEval);CHKERRQ(ierr);
530ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoGradientEval",  TAO_CLASSID,&TAO_GradientEval);CHKERRQ(ierr);
540ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoObjGradEval",   TAO_CLASSID,&TAO_ObjGradEval);CHKERRQ(ierr);
550ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoHessianEval",   TAO_CLASSID,&TAO_HessianEval);CHKERRQ(ierr);
560ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoConstrEval",    TAO_CLASSID,&TAO_ConstraintsEval);CHKERRQ(ierr);
570ebee16dSLisandro Dalcin   ierr = PetscLogEventRegister("TaoJacobianEval",  TAO_CLASSID,&TAO_JacobianEval);CHKERRQ(ierr);
58e94e781bSJacob Faibussowitsch   /* Process Info */
59e94e781bSJacob Faibussowitsch   {
60e94e781bSJacob Faibussowitsch     PetscClassId  classids[1];
61e94e781bSJacob Faibussowitsch 
62e94e781bSJacob Faibussowitsch     classids[0] = TAO_CLASSID;
63e94e781bSJacob Faibussowitsch     ierr = PetscInfoProcessClass("tao", 1, classids);CHKERRQ(ierr);
648e81d068SLisandro Dalcin   }
658e81d068SLisandro Dalcin   /* Process summary exclusions */
668e81d068SLisandro Dalcin   ierr = PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);CHKERRQ(ierr);
678e81d068SLisandro Dalcin   if (opt) {
688e81d068SLisandro Dalcin     ierr = PetscStrInList("tao",logList,',',&pkg);CHKERRQ(ierr);
69fa2bb9feSLisandro Dalcin     if (pkg) {ierr = PetscLogEventExcludeClass(TAO_CLASSID);CHKERRQ(ierr);}
708e81d068SLisandro Dalcin   }
718e81d068SLisandro Dalcin   /* Register package finalizer */
72a7e14dcfSSatish Balay   ierr = PetscRegisterFinalize(TaoFinalizePackage);CHKERRQ(ierr);
73a7e14dcfSSatish Balay   PetscFunctionReturn(0);
74a7e14dcfSSatish Balay }
75a7e14dcfSSatish Balay 
76*60da17ecSBarry Smith #ifdef PETSC_HAVE_DYNAMIC_LIBRARIES
77a7e14dcfSSatish Balay /*
78a7e14dcfSSatish Balay   PetscDLLibraryRegister - this function is called when the dynamic library it
79a7e14dcfSSatish Balay   is in is opened.
80a7e14dcfSSatish Balay 
81441846f8SBarry Smith   This registers all of the Tao methods that are in the libtao
82a7e14dcfSSatish Balay   library.
83a7e14dcfSSatish Balay 
84a7e14dcfSSatish Balay   Input Parameter:
85a7e14dcfSSatish Balay . path - library path
86a7e14dcfSSatish Balay */
87a7e14dcfSSatish Balay 
88*60da17ecSBarry Smith PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petsctao(void)
89a7e14dcfSSatish Balay {
90a7e14dcfSSatish Balay     PetscErrorCode ierr;
91a7e14dcfSSatish Balay 
92a7e14dcfSSatish Balay     PetscFunctionBegin;
93a7e14dcfSSatish Balay     ierr = TaoInitializePackage();CHKERRQ(ierr);
94a7e14dcfSSatish Balay     ierr = TaoLineSearchInitializePackage();CHKERRQ(ierr);
95a7e14dcfSSatish Balay     PetscFunctionReturn(0);
96a7e14dcfSSatish Balay }
97a7e14dcfSSatish Balay 
98*60da17ecSBarry Smith #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */
99