  A computational framework based on nonlinear direct-adjoint looping is
presented for optimizing mixing strategies for binary fluid systems. The
governing equations are the nonlinear Navier-Stokes equations, augmented by an
evolution equation for a passive scalar, which are solved by a spectral
Fourier-based method. The stirrers are embedded in the computational domain by
a Brinkman-penalization technique, and shape and path gradients for the
stirrers are computed from the adjoint solution. Four cases of increasing
complexity are considered, which demonstrate the efficiency and effectiveness
of the computational approach and algorithm. Significant improvements in mixing
efficiency, within the externally imposed bounds, are achieved in all cases.
