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: {
 15:   PetscFunctionListDestroy(&TaoList);
 16:   TaoPackageInitialized = PETSC_FALSE;
 17:   return 0;
 18: }

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

 26:   Level: developer

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

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

 53:     classids[0] = TAO_CLASSID;
 54:     PetscInfoProcessClass("tao", 1, classids);
 55:   }
 56:   /* Process summary exclusions */
 57:   PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);
 58:   if (opt) {
 59:     PetscStrInList("tao",logList,',',&pkg);
 60:     if (pkg) PetscLogEventExcludeClass(TAO_CLASSID);
 61:   }
 62:   /* Register package finalizer */
 63:   PetscRegisterFinalize(TaoFinalizePackage);
 64:   return 0;
 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:   TaoInitializePackage();
 81:   TaoLineSearchInitializePackage();
 82:   return 0;
 83: }
 84: #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */