Fortran - PowerPoint PPT Presentation

1 / 36
About This Presentation
Title:

Fortran

Description:

The DIMENSION attribute declares an array (10x10). Data Objects. Character Declarations ... is defined between two objects of the same user-defined type. ... – PowerPoint PPT presentation

Number of Views:193
Avg rating:3.0/5.0
Slides: 37
Provided by: kine4
Category:

less

Transcript and Presenter's Notes

Title: Fortran


1
Fortran 90 Programming
  • Example
  • Coding Style

2
Fortran 90 Programming
  • Example
  • Example Fortran 90 program
  • MODULE Triangle_Operations
  • IMPLICIT NONE
  • CONTAINS
  • FUNCTION Area(x,y,z)
  • REAL Area ! function type
  • REAL, INTENT( IN ) x, y, z
  • REAL theta, height
  • thetaACOS((x2y2-z2)/(2.0xy))
  • heightxSIN(theta) Area0.5yheight
  • END FUNCTION Area
  • END MODULE Triangle_Operations
  • PROGRAM Triangle
  • USE Triangle_Operations
  • IMPLICIT NONE REAL a, b, c, Area
  • PRINT, 'Welcome, please enter the lengths of
    the 3 sides.'
  • READ, a, b, c
  • PRINT,'Triangle''s area ',Area(a,b,c)

3
Fortran 90 Programming
  • Coding Style
  • It is recommended that the following coding
    convention is adopted
  • always use IMPLICIT NONE.
  • Fortran 90 keywords, intrinsic functions and user
    defined entities should be in upper case,
  • other user entities should be in lower case but
    may start with a capital letter.
  • indentation should be 1 or 2 spaces and should be
    applied to the bodies of program units, control
    blocks, INTERFACE blocks, etc.
  • the names of program units are always included in
    their END statements,
  • argument keywords are always used for optional
    arguments,
  • In order that a program fits onto a slide these
    rules are sometimes relaxed here.

4
Language Elements
  • Source Form
  • Character Set
  • Significance of Blanks
  • Comments
  • Names
  • Statement Ordering

5
Language Elements
  • Source Form
  • Free source form
  • 132 characters per line
  • !' comment initiator
  • ' line continuation character
  • ' statement separator
  • significant blanks.
  • Example,
  • PRINT, "This line is continued On the next
    line" END ! of program

6
Language Elements
  • Character Set
  • The following are valid in a Fortran 90 program
  • alphanumeric a-z, A-Z, 0-9, and _ (the
    underscore)
  • symbolic

7
Language Elements
  • Significance of Blanks
  • In free form source code blanks must not appear
  • within keywords
  • INTEGER wizzy ! is a valid keyword
  • INT EGER wizzy ! is not
  • within names
  • REAL running_total ! is a valid name
  • REAL running total ! is not
  • Blanks must appear
  • between two separate keywords
  • between keywords and names not otherwise
    separated by punctuation or other special
    characters.
  • INTEGER FUNCTION fit(i) ! is valid
    INTEGERFUNCTION fit(i) ! is not INTEGER
    FUNCTIONfit(i) ! is not
  • Blanks are optional between some keywords mainly
    END lt construct gt' and a few others if in doubt
    add a blank (it looks better too).

8
Language Elements
  •  
  • Comments
  • It is good practise to use lots of comments, for
    example,
  • PROGRAM Saddo
  • !
  • ! Program to evaluate marriage potential
  • !
  • LOGICAL TrainSpotter ! Do we spot trains?
  • LOGICAL SmellySocks ! Have we smelly socks?
  • INTEGER i, j ! Loop variables
  • everything after the ! is a comment
  • the ! in a character context does not begin a
    comment, for example, PRINT, "No chance of ever
    marrying!!!"

9
Language Elements
  • Names
  • In Fortran 90 variable names (and procedure names
    etc.)
  • must start with a letter
  • REAL a1 ! valid name
  • REAL 1a ! not valid name
  • may use only letters, digits and the underscore
  • CHARACTER atoz ! valid name
  • CHARACTER a-z ! not valid name
  • CHARACTER a_z ! OK
  • underscore should be used to separate words in
    long names
  • CHARACTER(LEN8) user_name ! valid name
    CHARACTER(LEN8) username ! different name
  • may not be longer than 31 characters

10
Language Elements
  • Statement Ordering
  • The following table details the prescribed
    ordering

11
Data Objects
  • Intrinsic Types
  • Literal Constants
  • Implicit Typing
  • Numeric and Logical Declarations
  • Character Declarations
  • Constants (Parameters)
  • Initialisation

12
Data Objects
  • Intrinsic Types
  • Fortran 90 has three broad classes of object
    type,
  • character
  • boolean
  • numeric.
  • these give rise to six simple intrinsic types,
    known as default types,
  • CHARACTER sex ! letter
  • CHARACTER(LEN12) name ! string
  • LOGICAL wed ! married?
  • REAL height DOUBLE PRECISION pi ! 3.14...
    INTEGER age ! whole No.
  • COMPLEX val ! x iy

13
Data Objects
  • Literal Constants
  • A literal constant is an entity with a fixed
    value
  • 12345 ! INTEGER
  • 1.0 ! REAL
  • -6.6E-06 ! REAL -6.610(-6)
  • .FALSE. ! LOGICAL
  • .TRUE. ! LOGICAL
  • "Mau'dib" ! CHARACTER
  • 'Mau''dib' ! CHARACTER
  • Note,
  • there are only two LOGICAL values
  • REAL s contain a decimal point, INTEGER s do not,
  • REAL s have an exponential form
  • character literals delimited by " and '
  • two occurrences of the delimiter inside a string
    produce one occurrence on output
  • there is only a finite range of values that
    numeric literals can take.

14
Data Objects
  • Implicit Typing
  • Undeclared variables have an implicit type,
  • if first letter is I, J, K, L, M or N then type
    is INTEGER
  • any other letter then type is REAL s.
  • Implicit typing is potentially very dangerous and
    should always be turned off by adding
  • IMPLICIT NONE as the first line after any USE
    statements.
  • Consider,
  • DO 30 I 1.1000
  • ...
  • 30 CONTINUE
  • in fixed format with implicit typing this
    declares a REAL variable DO30I and sets it to
    1.1000 instead of performing a loop 1000 times!

15
Data Objects
  • Numeric and Logical Declarations
  • With IMPLICIT NONE variables must be declared. A
    simplified syntax follows,
  • lt type gt ,lt attribute-list gt lt variable-list
    gt lt value gt
  • The following are all valid declarations,
  • REAL x
  • INTEGER i, j
  • LOGICAL, POINTER ptr
  • REAL, DIMENSION(10,10) y, z
  • INTEGER k 4
  • The DIMENSION attribute declares an array
    (10x10).

16
Data Objects
  • Character Declarations
  • Character variables are declared in a similar way
    to numeric types. CHARACTER variables can
  • refer to one character
  • refer to a string of characters which is achieved
    by adding a length specifier to the object
    declaration.
  • The following are all valid declarations,
  • CHARACTER(LEN10) name
  • CHARACTER sex
  • CHARACTER(LEN32) str
  • CHARACTER(LEN10), DIMENSION(10,10) Harray
    CHARACTER(LEN32), POINTER Pstr

17
Data Objects
  • Constants (Parameters)
  • Symbolic constants, oddly known as parameters in
    Fortran, can easily be set up either in an
    attributed declaration or parameter statement,
  • REAL, PARAMETER pi 3.14159
  • CHARACTER(LEN), PARAMETER son
    'bart', dad "Homer" CHARACTER constants can
    assume their length from the associated literal
    (LEN).
  • Parameters should be used
  • if it is known that a variable will only take one
    value
  • for legibility where a magic value' occurs in a
    program such as for maintainability when a
    constant' value could feasibly be changed in the
    future.

18
Data Objects
  • Initialisation
  • Variables can be given initial values
  • can use initialisation expressions,
  • may only contain PARAMETER s or literals.
  • REAL x, y 1.0D5
  • INTEGER i 5, j 100
  • CHARACTER(LEN5) light 'Amber'
  • CHARACTER(LEN9) gumboot 'Wellie'
  • LOGICAL on .TRUE., off .FALSE.
  • REAL, PARAMETER pi 3.141592
  • REAL, PARAMETER radius 3.5
  • REAL circum 2 pi radius
  • gumboot will be padded, to the right, with
    blanks.
  • In general, intrinsic functions cannot be used in
    initialisation expressions, the following can be
    REPEAT, RESHAPE, SELECTED_INT_KIND,
    SELECTED_REAL_KIND, TRANSFER, TRIM, LBOUND,
    UBOUND, SHAPE, SIZE, KIND, LEN, BIT_SIZE and
    numeric inquiry intrinsics, for, example, HUGE,
    TINY, EPSILON.

19
Expressions and Assignment
  • Expressions
  • Assignment
  • Intrinsic Numeric Operations
  • Relational Operators
  • Intrinsic Logical Operations
  • Intrinsic Character Operations

20
Expressions and Assignment
  • Expressions
  •  
  • Each of the three broad type classes has its own
    set of intrinsic (in-built) operators, these are
    combined with operands to form expressions.
    Expressions are made from one operator (e.g., ,
    -, , /, // and ) and at least one operand.
    Operands are also expressions.
  • Expressions have types derived from their
    operands they are either of intrinsic type or a
    user defined type. For example,
  • NumBabiesBorn1 -- numeric valued
  • "Ward "//Ward -- character valued
  • TimeSinceLastBirth .GT. MaxTimeTwixtBirths --
    logical valued
  • In addition to the intrinsic operations
  • operators may be defined by the user, for
    example, .INVERSE.. These defined operators (with
    1 or 2 operands) are specified in a procedure and
    can be applied to any type or combination of
    types. The operator functionality is given in a
    procedure which must then be mentioned in an
    interface block. Such operators are very powerful
    when used in conjunction with derived types and
    modules as a package of objects and operators.
  • intrinsic operators may be overloaded when using
    a derived type the user can specify exactly what
    each existing operator means in the context of
    this new type.

21
Expressions and Assignment
  • Assignment
  • Expressions are often used in conjunction with
    the assignment operator, , to give values to
    objects. This operator,
  • is defined between all intrinsic numeric types.
    The two operands of (the LHS and RHS) do not
    have to be the same type.
  • is defined between two objects of the same
    user-defined type.
  • may be explicitly overloaded so that assignment
    is meaningful in situations other than those
    above.
  • Examples,
  • a b
  • c SIN(.7)12.7
  • name initials//surname
  • bool (a.EQ.b.OR.c.NE.d)
  • The LHS is an object and the RHS is an
    expression.

22
Expressions and Assignment
  • Intrinsic Numeric Operations
  • The following operators are valid for numeric
    expressions,
  • exponentiation, a dyadic (takes two
    operands'') operator, for example, 102,
    (evaluated right to left)
  • and / multiply and divide, dyadic operators,
    for example, 107/4
  • and - plus and minus or add and subtract, a
    monadic (takes one operand'') and dyadic
    operators, for example, -4 and 78-3
  • All the above operators can be applied to numeric
    literals, constants, scalar and array objects
    with the only restriction being that the RHS of
    the exponentiation operator must be scalar.
    Example,
  • a b - c f -36/5 Note that operators have a
    predefined precedence, which defines the order
    that they are evaluated in, (see Section 10.3).
  • Now try this question

23
Expressions and Assignment Section 10.3
  • Operator Precedence
  •  
  • The following table depicts the order in which
    operators are evaluated
  • In an expression with no parentheses, the highest
    precedence operator is combined with its operands
    first In contexts of equal precedence left to
    right evaluation is performed except for .
  • Other relevant points are that the intrinsically
    defined order cannot be changed which means that
    user defined operators have a fixed precedence
    (at the top and bottom of the table depending on
    the operator type). The operator with the highest
    precedence has the tightest binding from the
    table user-defined monadic operators can be seen
    to be the most tightly binding.
  • The ordering of the operators is intuitive and is
    comparable to the ordering of other languages.
    The evaluation order can be altered by using
    parenthesis expressions in parentheses are
    evaluated first. In the context of equal
    precedence, left to right evaluation is performed
    except for where the expression is evaluated
    from right to left. This is important when
    teetering around the limits of the machines
    representation. Consider A-BC and AC-B, if A
    were the largest representable number and C is
    positive and smaller than B the first expression
    is OK but the second will crash the program with
    an overflow error.
  • One of the most common pitfalls occurs with the
    division operator -- it is good practice to put
    numerator and denominator in parentheses. Note
  • (AB)/Cis not the same as
  • AB/C
  • but
  • (AB)/Cis equivalent to
  • AB/C
  • This is because the multiplication operator binds
    tighter than the addition operator, however,
  • A/BCis not equivalent to
  • A/(BC)
  • because of left to right evaluation.
  • The syntax is such that two operators cannot be
    adjacent one times minus one is written 1(-1)
    and not 1-1. (This is the same as in most
    languages.)

24
Expressions and Assignment
  • Relational Operators
  • The following relational operators deliver a
    logical result
  • .GT. -- greater than.
  • .GE. -- greater than or equal to.
  • .LE. -- less than or equal to.
  • .LT. -- less than.
  • .NE. -- not equal to.
  • .EQ. -- equal to.
  • for example,
  • i .GT. 12 is an expression delivering a .TRUE. or
    .FALSE. result.
  • These above operators are equivalent to the
    following
  • gt -- greater than.
  • gt -- greater than or equal to.
  • lt -- less than or equal to.
  • lt -- less than.
  • / -- not equal to.
  • -- equal to.

25
Expressions and Assignment
  • for example,
  • i gt 12 Both sets of symbols may be used in a
    single statement.
  • Relational operators
  • compare the values of two operands.
  • deliver a logical result.
  • can be applied to numeric operands (restrictions
    on COMPLEX which can only use .EQ. and .NE.).
  • can be applied to default CHARACTER objects --
    both objects are made to be the same length by
    padding the shorter with blanks. Operators refer
    to ASCII order (see Appendix 32).
  • cannot be applied to LOGICAL objects, for
    example,
  • (bool .NE. .TRUE.) is not a valid expression but,
  • (.NOT.bool)is.
  • are used (in scalar) form in IF statements (see
    Section 11.1) and elementally in the WHERE
    statement (see Section 14.18).
  • Consider,
  • bool i.GT.j IF (i.EQ.j) c D IF (i j) c D
    The example demonstrates,
  • simple logical assignment using a relational
    operator,
  • IF statements using both forms of relational
    operators,
  • When using real-valued expressions (which are
    approximate) .EQ. and .NE. have no real meaning.
  • REAL Tol 0.0001 IF (ABS(a-b) .LT. Tol) same
    .TRUE.

26
Expressions and Assignment
  • Intrinsic Logical Operations
  • A LOGICAL or boolean expression returns a .TRUE.
    / .FALSE. result. The following are valid with
    LOGICAL operands,
  • .NOT. -- .TRUE. if operand is .FALSE..
  • .AND. -- .TRUE. if both operands are .TRUE.
  • .OR. -- .TRUE. if at least one operand is .TRUE.
  • .EQV. -- .TRUE. if both operands are the same
  • .NEQV. -- .TRUE. if both operands are different.
  • For example, if T is .TRUE. and F is .FALSE.
  • .NOT. T is .FALSE., .NOT. F is .TRUE..
  • T .AND. F is .FALSE., T .AND. T is .TRUE..
  • T .OR. F is .TRUE., F .OR. F is .FALSE..
  • T .EQV. F is .FALSE., F .EQV. F is .TRUE..
  • T .NEQV. F is .TRUE., F .NEQV. F is .FALSE..

27
Expressions and Assignment
  • Character Substrings
  • Consider,
  • CHARACTER(LEN), PARAMETER string
    "abcdefgh" substrings can be taken,
  • string is abcdefgh' (the whole string),
  • string(11) is a' (the first character),
  • string(24) is bcd' (2nd, 3rd and 4th
    characters),
  • string(1) is an error (the substring must be
    specified from a position to a position, a single
    subscript is no good).
  • string(1) is abcdefgh'.
  • string(1) is a'.

28
Expressions and Assignment
  • Concatenation
  • There is only one intrinsic character operator,
    the concatenation operator, //. Most string
    manipulation is performed using intrinsic
    functions.
  • CHARACTER(LEN4), PARAMETER name "Coal"
    CHARACTER(LEN10) song "Firey "//name
    PRINT, "Rowche "//"Rumble" PRINT,
    song(11)//name(24) would produce
  • Rowche Rumble Foal The example joins together two
    strings and then the first character of song and
    the 2nd, 3rd and 4th of name.
  • Note that // cannot be mixed with other types or
    kinds.

29
Simple Input / Output
  • PRINT Statement
  • PRINT Statement
  • READ Statement

30
Simple Input / Output
  • PRINT Statement
  • Note,
  • each PRINT statement begins a new line
  • the PRINT statement can transfer any object of
    intrinsic type to the standard output
  • strings may be delimited by the double or single
    quote symbols, " and '
  • two occurrences of the string delimiter inside a
    string produce one occurrence on output

31
Simple Input / Output
  • READ Statement
  • READ accepts unformatted data from the standard
    input channel, for example, if the type
    declarations are the same as for the PRINT
    example,
  • READ, long_name READ, x, y, z READ, lacigol
    accepts
  • Llanphairphwyll...gogogoch 0.4 5. 1.0e12 TNote,
  • each READ statement reads from a newline
  • the READ statement can transfer any object of
    intrinsic type from the standard input

32
More About Operations
  • Operator Precedence
  • Precedence Example
  • Cost of Arithmetic Operators
  • Precision Errors

33
More About Operations
  • Operator Precedence
  • Note
  • in an expression with no parentheses, the highest
    precedence operator is combined with its operands
    first
  • in contexts of equal precedence left to right
    evaluation is performed except for .

34
More About Operations
  • Precedence Example
  • The following expression,
  • x ab/5.0-cd1e is equivalent to
  • x ab/5.0-(cd)1e as is highest
    precedence. This is equivalent to
  • x a(b/5.0)-(cd)(1e) as / and are next
    highest. The remaining operators' precedences are
    equal, so we evaluate from left to right.

35
More About Operations
  • Cost of Arithmetic Operators
  • The cost increases going down the table,

36
More About Operations
  • Precision Errors
  • Since real numbers are stored approximately
  • every operation yields a slight loss of accuracy,
  • after many operations such 'round-off' errors
    build up,
  • catastrophic accuracy loss can arise when values
    that are almost equal are subtracted, leading
    digits are cancelled and a rounding errors become
    visible.
  • Consider,
  • x 0.123456 y 0.123446 PRINT, "x ",x," y
    ",y PRINT, "x-y ",x-y," should be 0.100d-4"
    May produce
  • x 0.123457 y 0.123445 x-y 0.130d-4 should
    be 0.100d-4 which is 30 in error.
  • A whole branch of Numerical Analysis is dedicated
    to minimising this class of errors in algorithms.
    Be careful!
Write a Comment
User Comments (0)
About PowerShow.com