The lattice Boltzmann method: Principles and practice