  In recent years, the use of adjoint vectors in Computational Fluid Dynamics
(CFD) has seen a dramatic rise. Their utility in numerous applications,
including design optimization, data assimilation, and mesh adaptation has
sparked the interest of both researchers and practitioners alike. In many of
these fields, the concept of an adjoint is explained differently, with various
notations and motivations employed. Further complicating matters is the
existence of two seemingly different types of adjoints -- "continuous" and
"discrete" -- as well as the more formal definition of adjoint operators
employed in linear algebra and functional analysis. These issues can make the
fundamental concept of an adjoint difficult to pin down. In these notes, we
hope to clarify some of the ideas surrounding adjoint vectors and to provide a
useful reference for both continuous and discrete adjoints alike. In
particular, we focus on the use of adjoints within the context of output-based
mesh adaptation, where the goal is to achieve accuracy in a particular quantity
(or "output") of interest by performing targeted adaptation of the
computational mesh. While this is our application of interest, the ideas
discussed here apply directly to design optimization, data assimilation, and
many other fields where adjoints are employed.
