# TaoAppSetObjectiveAndGradientRoutine

Sets a routine for function and gradient evaluation.

## Synopsis

    #include "tao.h"
    int TaoAppSetObjectiveAndGradientRoutine(TAO_APPLICATION taoapp, int (*funcgrad)(TAO_APPLICATION,Vec,double*,Vec, void*),void *ctx)

Collective on TAO_APPLICATION

## Input Parameters

| taoapp | - the TAO_APPLICATION context
| funcgrad | - routine for evaluating the function and gradient
| ctx | - optional user-defined context for private data for the function and gradient evaluation routine (may be TAO_NULL)

## Calling sequence of funcgrad

        funcgrad (TAO_APPLICATION tao,Vec x,double *f,Vec g,void *ctx);

| tao | - TAO_APPLICATION context
| x | - input vector
| f | - function value
| g | - gradient vector
| ctx | - optional user-defined context

## Notes

The user may call TaoAppSetObjectiveAndGradientRoutine() to set a routine that evaluates both the function and gradient. Alternatively, the user may call both TaoAppSetObjectiveRoutine() and TaoAppSetGradientRoutine() to set separate routines for function and gradient evaluation.

Using a single routine to compute the function and gradient, as specified via TaoAppSetObjectiveAndGradientRoutine(), may enable better performance for applications in which many of the function and gradient computations are identical.

## Fortran Note

If your Fortran compiler does not recognize symbols over 31 characters in length, then use the identical routine with the shortened name TaoAppSetObjectiveAndGradientRo()

## Options Database Keys

-tao_view_gradient -view the gradient after each iteration using PETSC_VIEWER_STDOUT_WORLD

## Keywords

TAO_APPLICATION, set, objective, gradient

## See Also

TaoAppComputeObjectiveAndGradient()

Level:beginner
Location:src/petsctao/application/petscapp/tao_app_fg.c
TAO Solver Index
Table of Contents

### Examples

src/bound/examples/tutorials/plate2.c.html
src/bound/examples/tutorials/jbearing2.c.html
src/bound/examples/tutorials/plate2f.F.html
src/unconstrained/examples/tutorials/eptorsion1.c.html
src/unconstrained/examples/tutorials/eptorsion2.c.html
src/unconstrained/examples/tutorials/minsurf2.c.html
src/unconstrained/examples/tutorials/rosenbrock1.c.html
src/unconstrained/examples/tutorials/eptorsion2f.F.html
src/unconstrained/examples/tutorials/rosenbrock1f.F.html