Source: https://levich.ccny.cuny.edu/koplik/molecular_simulation/138fortran90.pdf