Actual source code: dlregistao.c
1: #define TAO_DLL
3: #include <petsc/private/taoimpl.h>
5: static PetscBool TaoPackageInitialized = PETSC_FALSE;
7: /*@C
8: TaoFinalizePackage - This function destroys everything in the PETSc/TAO
9: interface to the Tao package. It is called from PetscFinalize().
11: Level: developer
12: @*/
13: PetscErrorCode TaoFinalizePackage(void)
14: {
18: PetscFunctionListDestroy(&TaoList);
19: TaoPackageInitialized = PETSC_FALSE;
20: return(0);
21: }
23: const char *const TaoADMMRegularizerTypes[] = {"REGULARIZER_USER","REGULARIZER_SOFT_THRESH","TaoADMMRegularizerType","TAO_ADMM_",NULL};
24: const char *const TaoADMMUpdateTypes[] = {"UPDATE_BASIC","UPDATE_ADAPTIVE","UPDATE_ADAPTIVE_RELAXED","TaoADMMUpdateType","TAO_ADMM_",NULL};
25: const char *const TaoALMMTypes[] = {"CLASSIC","PHR","TaoALMMType","TAO_ALMM_",NULL};
26: /*@C
27: TaoInitializePackage - This function sets up PETSc to use the Tao
28: package. When using static or shared libraries, this function is called from the
29: first entry to TaoCreate(); when using shared or static libraries, it is called
30: from PetscDLLibraryRegister_tao()
32: Level: developer
34: .seealso: TaoCreate()
35: @*/
36: PetscErrorCode TaoInitializePackage(void)
37: {
38: char logList[256];
39: PetscBool opt,pkg;
44: if (TaoPackageInitialized) return(0);
45: TaoPackageInitialized = PETSC_TRUE;
46: /* Register Classes */
47: PetscClassIdRegister("Tao",&TAO_CLASSID);
48: /* Register Constructors */
49: TaoRegisterAll();
50: /* Register Events */
51: PetscLogEventRegister("TaoSolve", TAO_CLASSID,&TAO_Solve);
52: PetscLogEventRegister("TaoObjectiveEval", TAO_CLASSID,&TAO_ObjectiveEval);
53: PetscLogEventRegister("TaoGradientEval", TAO_CLASSID,&TAO_GradientEval);
54: PetscLogEventRegister("TaoObjGradEval", TAO_CLASSID,&TAO_ObjGradEval);
55: PetscLogEventRegister("TaoHessianEval", TAO_CLASSID,&TAO_HessianEval);
56: PetscLogEventRegister("TaoConstrEval", TAO_CLASSID,&TAO_ConstraintsEval);
57: PetscLogEventRegister("TaoJacobianEval", TAO_CLASSID,&TAO_JacobianEval);
58: /* Process Info */
59: {
60: PetscClassId classids[1];
62: classids[0] = TAO_CLASSID;
63: PetscInfoProcessClass("tao", 1, classids);
64: }
65: /* Process summary exclusions */
66: PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);
67: if (opt) {
68: PetscStrInList("tao",logList,',',&pkg);
69: if (pkg) {PetscLogEventExcludeClass(TAO_CLASSID);}
70: }
71: /* Register package finalizer */
72: PetscRegisterFinalize(TaoFinalizePackage);
73: return(0);
74: }
76: #ifdef PETSC_HAVE_DYNAMIC_LIBRARIES
77: /*
78: PetscDLLibraryRegister - this function is called when the dynamic library it
79: is in is opened.
81: This registers all of the Tao methods that are in the libtao
82: library.
84: Input Parameter:
85: . path - library path
86: */
88: PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petsctao(void)
89: {
93: TaoInitializePackage();
94: TaoLineSearchInitializePackage();
95: return(0);
96: }
98: #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */