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:   PetscFunctionBegin;
 14:   PetscCall(PetscFunctionListDestroy(&TaoList));
 15:   TaoPackageInitialized = PETSC_FALSE;
 16:   PetscFunctionReturn(PETSC_SUCCESS);
 17: }

 19: /*@C
 20:   TaoInitializePackage - This function sets up PETSc to use the Tao
 21:   package.  When using static or shared libraries, this function is called from the
 22:   first entry to `TaoCreate()`; when using shared or static libraries, it is called
 23:   from PetscDLLibraryRegister_tao()

 25:   Level: developer

 27: .seealso: `TaoCreate()`
 28: @*/
 29: PetscErrorCode TaoInitializePackage(void)
 30: {
 31:   char      logList[256];
 32:   PetscBool opt, pkg;

 34:   PetscFunctionBegin;
 35:   if (TaoPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
 36:   TaoPackageInitialized = PETSC_TRUE;
 37:   /* Register Classes */
 38:   PetscCall(PetscClassIdRegister("Tao", &TAO_CLASSID));
 39:   /* Register Constructors */
 40:   PetscCall(TaoRegisterAll());
 41:   /* Register Events */
 42:   PetscCall(PetscLogEventRegister("TaoSolve", TAO_CLASSID, &TAO_Solve));
 43:   PetscCall(PetscLogEventRegister("TaoObjectiveEval", TAO_CLASSID, &TAO_ObjectiveEval));
 44:   PetscCall(PetscLogEventRegister("TaoGradientEval", TAO_CLASSID, &TAO_GradientEval));
 45:   PetscCall(PetscLogEventRegister("TaoObjGradEval", TAO_CLASSID, &TAO_ObjGradEval));
 46:   PetscCall(PetscLogEventRegister("TaoHessianEval", TAO_CLASSID, &TAO_HessianEval));
 47:   PetscCall(PetscLogEventRegister("TaoConstrEval", TAO_CLASSID, &TAO_ConstraintsEval));
 48:   PetscCall(PetscLogEventRegister("TaoJacobianEval", TAO_CLASSID, &TAO_JacobianEval));
 49:   /* Process Info */
 50:   {
 51:     PetscClassId classids[1];

 53:     classids[0] = TAO_CLASSID;
 54:     PetscCall(PetscInfoProcessClass("tao", 1, classids));
 55:   }
 56:   /* Process summary exclusions */
 57:   PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
 58:   if (opt) {
 59:     PetscCall(PetscStrInList("tao", logList, ',', &pkg));
 60:     if (pkg) PetscCall(PetscLogEventExcludeClass(TAO_CLASSID));
 61:   }
 62:   /* Register package finalizer */
 63:   PetscCall(PetscRegisterFinalize(TaoFinalizePackage));
 64:   PetscFunctionReturn(PETSC_SUCCESS);
 65: }

 67: #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
 68: /*
 69:   PetscDLLibraryRegister - this function is called when the dynamic library it
 70:   is in is opened.

 72:   This registers all of the Tao methods that are in the libtao
 73:   library.

 75:   Input Parameter:
 76: . path - library path
 77: */
 78: PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petsctao(void)
 79: {
 80:   PetscFunctionBegin;
 81:   PetscCall(TaoInitializePackage());
 82:   PetscCall(TaoLineSearchInitializePackage());
 83:   PetscFunctionReturn(PETSC_SUCCESS);
 84: }
 85: #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */