Source: https://www.lrsm.upenn.edu/~vitek/courses/f77intro/f77intro.pdf