Learning FORTRAN In the Modern Era,
I’ve recently come to maintain a large amount of scientific calculation-intensive FORTRAN code. I’m having difficulties getting a handle on all of the, say, nuances, of a forty year old language, despite google & two introductory level books. The code is rife with “performance enhancing improvements”. Does anyone have any guides or practical advice for de-optimizing FORTRAN into CS 101 levels? Does anyone have knowledge of how FORTRAN code optimization operated? Are there any typical FORTRAN ‘gotchas’ that might not occur to a Java/C++/.NET raised developer taking over a FORTRAN 77/90 codebase?
You kind of have to get a “feel” for what programmers had to do back in the day. The vast majority of the code I work with is older than I am and ran on machines that were “new” when my parents were in high school.
Common FORTRAN-isms I deal with, that hurt readability are:
- Common blocks
- Implicit variables
- Two or three DO loops with shared CONTINUE statements
- GOTO’s in place of DO loops
- Arithmetic IF statements
- Computed GOTO’s
- Equivalence REAL/INTEGER/other in some common block
Strategies for solving these involve:
- Get, worth the money, it solves a lot of them automatically and Bug Free(tm)
- Move to Fortran 90 if at all possible, if not move to free-format Fortran 77
- Add IMPLICIT NONE to each subroutine and then fix every compile error, time consuming but ultimately necessary, some programs can do this for you automatically (or you can script it)
- Moving all COMMON blocks to MODULEs, low hanging fruit, worth it
- Convert arithmetic IF statements to IF..ELSEIF..ELSE blocks
- Convert computed GOTOs to SELECT CASE blocks
- Convert all DO loops to the newer F90 syntax
myloop: do ii = 1, nloops ! do something enddo myloop
- Convert equivalenced common block members to either ALLOCATABLE memory allocated in a module, or to their true character routines if it is Hollerith being stored in a REAL
If you had more specific questions as to how to accomplish some readability tasks, I can give advice. I have a code base of a few hundred thousand lines of Fortran which was written over the span of 40 years that I am in some way responsible for, so I’ve probably run across any “problems” you may have found.
That’s the answer Learning FORTRAN In the Modern Era, Hope this helps those looking for an answer. Then we suggest to do a search for the next question and find the answer only on our site.
The answers provided above are only to be used to guide the learning process. The questions above are open-ended questions, meaning that many answers are not fixed as above. I hope this article can be useful, Thank you