Adjoint algorithmic differentiation (AAD)