Introduction to Modern Fortran

IMPORTANT: This course is partially copyright Dr J.S. Morgan, Computing Services Department, the University of Liverpool, and its presence here does NOT constitute permission to copy it for any reason or use other than attending the course or using it for personal study. The other part of the copyright is the author's. You may, of course, refer to these pages to see what they contain. If you want to take a copy for any other reason, please contact the author for permission. The intention is to release it into the "public domain", so it will not be charged for.

This is a basic introduction to modern Fortran. At the end of the course, students should be able to write significant programs in Fortran, and to be able to start working on existing programs written in modern Fortran (i.e. in the Fortran 90/95 style). It will not cover obsolete features of Fortran, some of the more advanced aspects, or most of the extensions introduced by Fortran 2003.


In addition to some computing skills, it is essential to know enough about matrices to understand Fortran arrays, and they are no longer taught in A-level Mathematics. For more information, see Matrix Prerequisites.


The first four lectures cover the essential concepts, syntax and use of modern Fortran.

1: Introduction

2: Fortran Language Rules

3: Data Types and Basic Calculation

4: Control Constructs

The next four lectures cover the main areas where Fortran is significantly more powerful than languages like C++, and are the key to using it effectively.

5: Array Concepts

6: Procedures

7: KIND, Precision and COMPLEX

8: Modules and Interfaces

The next three lectures are a description of how to use derived types as simple structures, and a description of Fortran I/O, which is very unlike all other current languages.

9: Derived Types

10: I/O and Files

11: More About I/O and Files

Normally, lectures 1 to 5 are given on the first day, 6 to 8 on the second, and 9 onwards (including some of the extra material) on the third. But the schedule and coverage may be varied to meet the needs of the audience.

Auxiliary Material

Practical exercises

These are practical exercises to use the facilities taught; some are questions to answer and others are exercises in writing programs.

Programs and data used in the practicals

These are programs and data used in the exercises. Anyone working through the exercises will need to download them.

Specimen answers to the exercises

These are some specimen answers, which may help if you get stuck with an exercise.

Extra Lectures

You are advised not to look at these until you are comfortable using the material in the previous lectures. See also the Old Fortran course below, which contains some explanation of older features the course ignores.

This lecture is a brief description of how to use data pointers in Fortran.

12: Data Pointers

This lecture describes external names and how to use make and the linker on programs made up of multiple files or modules.

13: External Names, Make and Linking

This lecture is an introduction of how to use C from Fortran and vice versa, using the portable facilities defined in Fortran 2003. Regrettably, the boundaries between safe use and unsafe usage cannot be explained simply, though using the facilities is not hard.

14: Interoperability with C

These lectures are unavoidably complicated, but they include information that may be needed for debugging and tuning.

15: Advanced Array Concepts

16: Advanced Use Of Procedures

17: Advanced I/O and Files


Programming in Fortran 90/95 by Steve Morgan and Lawrie Schonfelder (Fortran Market, PDF, $15)

Fortran 95/2003 Explained by Michael Metcalf, John Reid and Malcolm Cohen

There are also Fortran 90 versions of the above two books, which would cover most of what is taught here.

Fortran 90 Programming by Miles Ellis, Ivor Phillips and Thomas Lahey

Other Relevant Courses

How Computers Handle Numbers

Software Design and Development

Building, installing and running software

Unix: Introduction to the Command Line Interface

Python: Introduction for Programmers

Python: Regular Expressions

Courses on Old Fortran

SC22WG5 (ISO Fortran standard)

Liverpool Course