  Most nonlinear partial differential equation (PDE) solvers require the
Jacobian matrix associated to the differential operator. In PETSc, this is
typically achieved by either an analytic derivation or numerical approximation
method such as finite differences. For complex applications, hand-coding the
Jacobian can be time-consuming and error-prone, yet computationally efficient.
Whilst finite difference approximations are straight-forward to implement, they
have high arithmetic complexity and low accuracy. Alternatively, one may
compute Jacobians using algorithmic differentiation (AD), yielding the same
derivatives as an analytic derivation, with the added benefit that the
implementation is problem independent. In this work, the operator overloading
AD tool ADOL-C is applied to generate Jacobians for time-dependent, nonlinear
PDEs and their adjoints. Various strategies are considered, including
compressed and matrix-free approaches. In numerical experiments with a 2D
diffusion-reaction model, the performance of these strategies has been studied
and compared to the hand-derived version.
