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 */