a fortran primer - smu.ca thacker/teaching/3437/ fortran primer i introduction fortran is a formula...

Download A FORTRAN PRIMER - smu.ca thacker/teaching/3437/ FORTRAN PRIMER I INTRODUCTION FORTRAN is a FORmula TRANslator which translates ... Attention is paid to what the FORTRAN statements

Post on 05-Mar-2018

219 views

Category:

Documents

6 download

Embed Size (px)

TRANSCRIPT

  • A FORTRAN PRIMER

    David A. Clarke

    Department of Astronomy and Physics

    Saint Marys University

    Halifax, NS, Canada

    January, 2002

    Revised December, 2005

    i

  • ii

  • TABLE OF CONTENTS

    I Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

    II Steps to Computer Programming . . . . . . . . . . . . . . . . . . . . . . 3

    III Sample Algorithm and FORTRAN Program . . . . . . . . . . . . . . . . . 5

    3.1 Designing an Algorithm . . . . . . . . . . . . . . . . . . . . . . . . 5

    3.2 Converting the Algorithm to FORTRAN with Good Programming Style . . . 63.2.1 Delineating Program Modules . . . . . . . . . . . . . . . . . . 103.2.2 The Program Statement and Selecting a Name for your Program . . . 113.2.3 Program History . . . . . . . . . . . . . . . . . . . . . . . . 113.2.4 Declaration Statements . . . . . . . . . . . . . . . . . . . . . 113.2.5 The Body of the Main Program . . . . . . . . . . . . . . . . . 123.2.6 The Subroutine . . . . . . . . . . . . . . . . . . . . . . . . 17

    3.3 Poor Programming Style . . . . . . . . . . . . . . . . . . . . . . . 19

    IV Data Types and Structures . . . . . . . . . . . . . . . . . . . . . . . 21

    4.1 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

    4.2 Variable Types . . . . . . . . . . . . . . . . . . . . . . . . . . . 224.2.1 Integer Type . . . . . . . . . . . . . . . . . . . . . . . . . 224.2.2 Character Type . . . . . . . . . . . . . . . . . . . . . . . . 234.2.3 Logical Type . . . . . . . . . . . . . . . . . . . . . . . . . . 234.2.4 Real Type (Single and Double Precision) . . . . . . . . . . . . . 23

    4.3 Arrays and Parameters . . . . . . . . . . . . . . . . . . . . . . . 25

    4.4 Variable Assignments . . . . . . . . . . . . . . . . . . . . . . . . 26

    V Common FORTRAN Statements . . . . . . . . . . . . . . . . . . . . . 28

    5.1 do . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    5.2 if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

    5.3 if-then-else-endif . . . . . . . . . . . . . . . . . . . . . . . . 30

    5.4 go to; goto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

    5.5 open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    5.6 close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

    5.7 write/format . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

    5.8 read/format . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

    iii

  • 5.9 Intrinsic Functions . . . . . . . . . . . . . . . . . . . . . . . . . 385.9.1 ** . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385.9.2 sqrt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395.9.3 exp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405.9.4 log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405.9.5 log10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405.9.6 sin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405.9.7 cos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405.9.8 min . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415.9.9 max . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415.9.10 abs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415.9.11 sign . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415.9.12 int . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415.9.13 real . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425.9.14 dble . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

    iv

  • A FORTRAN PRIMER

    I INTRODUCTION

    FORTRAN is a FORmula TRANslator which translates formul written in the humanlanguage of mathematics to the machine language of binary code. FORTRAN allows theprogrammer to type in expressions at the keyboard reminiscent to how they appear on paper,and through the steps of pre-compiling, compiling, and linking, a binary code executable bythe machine is generated.

    FORTRAN was designed for scientific computing. Other languages like C, C++, Basic,Cobol, PL1, etc. all have their proponents, the most militant of which will waste no time intelling you that as a computer language, FORTRAN is on its way out. Yet, at the time ofthis writing, 90% of all flops1 flopped by scientific applications worldwide are floppedby code generated by a FORTRAN compiler2. Evidently, as Mark Twain might have put it:The report of FORTRANs demise has been greatly exaggerated! 3.

    In all likelihood, FORTRAN is the only scientific computer language you will ever needto learn. You may want to pick up C++ at some time, but it wont be necessary if youknow FORTRAN thoroughly. The biggest complaint about FORTRAN by its detractorsis that it leads to unstructured, undecipherable spaghetti code (e.g., the all-dreaded andoverly maligned GOTO statements). Untrue. FORTRAN allows the programmer to writespaghetti code, but also allows highly structured coding and whether a program is writtenas spaghetti code or not is a function of the programmers laziness, not of any inherentshortfalls in the language.

    The first release of FORTRAN was FORTRAN66 in, perhaps you can guess, 1966. Thislanguage was limited, and was used by a relatively small circle of programmers. But de-mand for the new language grew, and in 1977, FORTRAN77 was released. This was thefirst comprehensive version of the language, allowing for virtually all functions a scientificprogrammer could need.

    As structured programming became the buzz and demand for more abstract programminggrew, FORTRAN90 was released, but not until 1994. This long-awaited version underwentmany unexpected revisions as the international committee charged with its content haggledover the details. In the 17 years between FORTRAN77 and FORTRAN90, many non-standard features were built into various versions of the language by various vendors. Thus,

    1Flops is computerese for FLoating point OPerationS, one of which is required for each add or subtract,four for each multiply, 10 or so for each divide, etc.

    2To those C users who may doubt this statistic, look carefully at your C compiler. Many C compilers,especially in supercomputing environments, will actually translate some or all of your C to FORTRAN, thenuse a FORTRAN compiler which is better suited for optimisation!

    3Actually, what Mark Twain wrote was The report of my death was an exaggeration, but the words demiseand greatly are commonly added, as though Mark Twains writings werent colourful enough!

    1

  • IBM, DEC, Cray, Sun, etc., all offered F77 compilers that contained standard FORTRAN77plus their own special features, upon which many programmers came to rely. This madeFORTRAN much less portable, and some abandoned the language for this reason.

    FORTRAN90 was designed to include most of the specialised features invented by some ofthe largest vendors of FORTRAN77 as well as all the features of FORTRAN77 itself. Thus,programmers who used an extended version of FORTRAN77 suddenly found that their codewas again portable, at least with very minor changes to conform to the new standards, andthe use of the language began to grow again.

    A year after FORTRAN90 was released, FORTRAN95 came out, in large part to respondto the rapidly rising use of massively parallel architecture. FORTRAN95 was also the firstversion of the language to drop features of FORTRAN66 (e.g., hollerith strings), and so isnot completely downwardly compatible. On the other hand, FORTRAN90 is completelycompatible with FORTRAN66 and FORTRAN77.

    In this primer, a subset of standard FORTRAN77 is described. Any F90 compiler cancompile any program written in standard FORTRAN77 (e.g., without any of the vendor-specific extensions used), and if your code is written with only the statements found in thisprimer, it can be compiled by an F95 compiler as well. This primer assumes the reader hasa rudimentary knowledge of UNIX, and in a UNIX environment knows how to create files,directories, move files around, edit text files, and submit commands. No detailed knowledgeof UNIX script language is assumed, though the more the reader is familiar with UNIX, thebetter.

    The next section lists the typical steps required to design, develop, and execute a computerprogram (written in FORTRAN or otherwise), without reference to details of the computerlanguage. Section III is the most important section in this primer, and should be read andunderstood thoroughly. It gives a sample FORTRAN program that the reader can use asa template for their first programs, and includes a careful description of the code line byline. Attention is paid to what the FORTRAN statements do, and to programming style.Finally, the last two sections, meant as a reference, give more details on the syntax of thelanguage. Section IV discusses variables, variable types, arrays, etc., while Section V givesdescriptions of the most commonly used FORTRAN statements. These discussions are byno means exhaustive, and the more experienced programmer will want to consult one of themany comprehensive FORTRAN texts, vendor manuals, and websites available.

    2

  • II STEPS TO COMPUTER PROGRAMMING

    In order to execute a computer program (code), one must:

    1. Develop the algorithm (e.g., with pen and paper);

    2. Write the code (using your favourite text editor in your favourite computer languageFORTRAN!);

    3. Precompile the code (optional);

    4. Compile the code (f77 -c myprob.f);

    5. Link the code (f77 myprob.o mylib.a);

    6. Execute the code (a.out).

    f77 refers to the FORTRAN77 compiler which, with the -c option, generates what is calledobject code, unreadable by humans and unexecutable by computers. It is an intermediatestage to which other object f

Recommended

View more >