TAC++ is a source-to-source translator for C(++) code,
i.e. TAC++ accepts C(++) code as input,
applies a semantic transformation,
and generates C(++) code as output.
The generated code can operate in forward or reverse mode
(tangent linear or adjoint model).
TAC++ can generate code to evaluate
Jacobian times vector products or the full Jacobian.
Higher order derivative code is generated
by applying TAC++ multiple times.
TAC++ transfers the well proven design concepts for our AD tool
TAF to C(++).
TAC++ normalises the code and applies a control flow analysis.
TAC++ applies an interprocedural data flow analysis.
Given the independent and dependent
variables of the specified top-level routine, TAC++ then determines all active
routines and variables and produces derivative code only for those.
TAC++ accepts several kinds of directives.
Currently these directives are used to support the tool's code analysis.
Inclusion of directives that trigger generation of storing/reading schemes
for required values is in progress.
TAC++ generated code is structured an well readable.
of TAC++ generated code for a Monte Carlo simulation in
computational finance (LIBOR market model).
Original model code and hand-coded tangent and adjoint
Giles are available
TAC++ is a commercial product.
us to obtain a TAC++ licence.