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
10: @*/
11: PetscErrorCode TaoFinalizePackage(void)
12: {
13: PetscFunctionListDestroy(&TaoList);
14: TaoPackageInitialized = PETSC_FALSE;
15: return 0;
16: }
18: /*@C
19: TaoInitializePackage - This function sets up PETSc to use the Tao
20: package. When using static or shared libraries, this function is called from the
21: first entry to `TaoCreate()`; when using shared or static libraries, it is called
22: from PetscDLLibraryRegister_tao()
24: Level: developer
26: .seealso: `TaoCreate()`
27: @*/
28: PetscErrorCode TaoInitializePackage(void)
29: {
30: char logList[256];
31: PetscBool opt, pkg;
33: if (TaoPackageInitialized) return 0;
34: TaoPackageInitialized = PETSC_TRUE;
35: /* Register Classes */
36: PetscClassIdRegister("Tao", &TAO_CLASSID);
37: /* Register Constructors */
38: TaoRegisterAll();
39: /* Register Events */
40: PetscLogEventRegister("TaoSolve", TAO_CLASSID, &TAO_Solve);
41: PetscLogEventRegister("TaoObjectiveEval", TAO_CLASSID, &TAO_ObjectiveEval);
42: PetscLogEventRegister("TaoGradientEval", TAO_CLASSID, &TAO_GradientEval);
43: PetscLogEventRegister("TaoObjGradEval", TAO_CLASSID, &TAO_ObjGradEval);
44: PetscLogEventRegister("TaoHessianEval", TAO_CLASSID, &TAO_HessianEval);
45: PetscLogEventRegister("TaoConstrEval", TAO_CLASSID, &TAO_ConstraintsEval);
46: PetscLogEventRegister("TaoJacobianEval", TAO_CLASSID, &TAO_JacobianEval);
47: /* Process Info */
48: {
49: PetscClassId classids[1];
51: classids[0] = TAO_CLASSID;
52: PetscInfoProcessClass("tao", 1, classids);
53: }
54: /* Process summary exclusions */
55: PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt);
56: if (opt) {
57: PetscStrInList("tao", logList, ',', &pkg);
58: if (pkg) PetscLogEventExcludeClass(TAO_CLASSID);
59: }
60: /* Register package finalizer */
61: PetscRegisterFinalize(TaoFinalizePackage);
62: return 0;
63: }
65: #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
66: /*
67: PetscDLLibraryRegister - this function is called when the dynamic library it
68: is in is opened.
70: This registers all of the Tao methods that are in the libtao
71: library.
73: Input Parameter:
74: . path - library path
75: */
76: PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petsctao(void)
77: {
78: TaoInitializePackage();
79: TaoLineSearchInitializePackage();
80: return 0;
81: }
82: #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */