Modern Fortran explained. Incorporating Fortran 2018