Use array of thread owned variables instead if critical sections in maxWaveSpeed computation
Reorder inner and outer loops in order to exploit cache

Since Float2D stores data in column major order, we should loop over all columns in the outer loop and then over all rows in the inner loop
Do not pre-initialiaze memory for faster memory access

Do not pre-initialize the 2D grids with zero (since that is unnecessary anyways) to try to use fast nearby memory for each core on multicore and multisocket systems