Numerical solution of partial differential equations : finite difference methods