Shape optimization in computational fluid dynamics