Actual source code: dlregistao.c
1: #include <petsc/private/taoimpl.h>
3: static PetscBool TaoPackageInitialized = PETSC_FALSE;
5: /*@C
6: TaoFinalizePackage - This function destroys everything in the PETSc/Tao
7: interface to the Tao package. It is called from `PetscFinalize()`.
9: Level: developer
11: .seealso: `TaoInitializePackage()`, `PetscFinalize()`, `TaoRegister()`, `TaoRegisterAll()`
12: @*/
13: PetscErrorCode TaoFinalizePackage(void)
14: {
15: PetscFunctionBegin;
16: PetscCall(PetscFunctionListDestroy(&TaoList));
17: PetscCall(PetscFunctionListDestroy(&TaoTermList));
18: TaoPackageInitialized = PETSC_FALSE;
19: PetscFunctionReturn(PETSC_SUCCESS);
20: }
22: /*@C
23: TaoInitializePackage - This function sets up PETSc to use the Tao
24: package. When using static or shared libraries, this function is called from the
25: first entry to `TaoCreate()`; when using shared or static libraries, it is called
26: from PetscDLLibraryRegister_tao()
28: Level: developer
30: Note:
31: This function never needs to be called by PETSc users.
33: .seealso: `TaoCreate()`, `TaoFinalizePackage()`, `TaoRegister()`, `TaoRegisterAll()`
34: @*/
35: PetscErrorCode TaoInitializePackage(void)
36: {
37: char logList[256];
38: PetscBool opt, pkg;
40: PetscFunctionBegin;
41: if (TaoPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
42: TaoPackageInitialized = PETSC_TRUE;
43: /* Register Classes */
44: PetscCall(PetscClassIdRegister("Tao", &TAO_CLASSID));
45: PetscCall(PetscClassIdRegister("TaoTerm", &TAOTERM_CLASSID));
46: /* Register Constructors */
47: PetscCall(TaoRegisterAll());
48: PetscCall(TaoTermRegisterAll());
49: /* Register Events */
50: PetscCall(PetscLogEventRegister("TaoSolve", TAO_CLASSID, &TAO_Solve));
51: PetscCall(PetscLogEventRegister("TaoTermObjEval", TAOTERM_CLASSID, &TAOTERM_ObjectiveEval));
52: PetscCall(PetscLogEventRegister("TaoTermGradEval", TAOTERM_CLASSID, &TAOTERM_GradientEval));
53: PetscCall(PetscLogEventRegister("TaoTermObjGrad", TAOTERM_CLASSID, &TAOTERM_ObjGradEval));
54: PetscCall(PetscLogEventRegister("TaoTermHessEval", TAOTERM_CLASSID, &TAOTERM_HessianEval));
55: PetscCall(PetscLogEventRegister("TaoResidualEval", TAO_CLASSID, &TAO_ResidualEval));
56: PetscCall(PetscLogEventRegister("TaoConstrEval", TAO_CLASSID, &TAO_ConstraintsEval));
57: PetscCall(PetscLogEventRegister("TaoJacobianEval", TAO_CLASSID, &TAO_JacobianEval));
58: /* Process Info */
59: {
60: PetscClassId classids[2];
62: classids[0] = TAO_CLASSID;
63: classids[1] = TAOTERM_CLASSID;
64: PetscCall(PetscInfoProcessClass("tao", 1, classids));
65: PetscCall(PetscInfoProcessClass("taoterm", 1, &classids[1]));
66: }
67: /* Process summary exclusions */
68: PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
69: if (opt) {
70: PetscCall(PetscStrInList("tao", logList, ',', &pkg));
71: if (pkg) PetscCall(PetscLogEventExcludeClass(TAO_CLASSID));
72: PetscCall(PetscStrInList("taoterm", logList, ',', &pkg));
73: if (pkg) PetscCall(PetscLogEventExcludeClass(TAOTERM_CLASSID));
74: }
75: /* Register package finalizer */
76: PetscCall(PetscRegisterFinalize(TaoFinalizePackage));
77: PetscFunctionReturn(PETSC_SUCCESS);
78: }
80: #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
81: /*
82: PetscDLLibraryRegister - this function is called when the dynamic library it
83: is in is opened.
85: This registers all of the Tao methods that are in the libtao
86: library.
88: Input Parameter:
89: . path - library path
90: */
91: PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petsctao(void)
92: {
93: PetscFunctionBegin;
94: PetscCall(TaoInitializePackage());
95: PetscCall(TaoLineSearchInitializePackage());
96: PetscFunctionReturn(PETSC_SUCCESS);
97: }
98: #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */