Numerical PDE-Constrained Optimization