Methods For Pde-Constrained Optimization