High Performance Computing and the Art of Parallel Programming: An Introduction for Geographers, Social Scientists and Engineers