Using OpenMP: Portable Shared Memory Parallel Programming (Scientific and Engineering Computation)