Programming Parallel and Distributed Systems for Large Scale Numerical Simulation Applications