fortran 90/95 and computational jancely/nm/texty/fortran/f90_comp_phys.pdf · 1966: the first ever

Download Fortran 90/95 and Computational jancely/NM/Texty/Fortran/f90_comp_phys.pdf · 1966: The first ever

Post on 30-Jul-2018

212 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

  • Fortran 90/95 and ComputationalPhysics

    Jens Hjrleifur Brarson

    jensba@raunvis.hi.is

    University of Iceland

    Fortran 90/95 and Computational Physics p.1/22

  • Overview

    What is Fortran?

    Why Fortran?

    Some Important Things

    Summary

    Fortran 90/95 and Computational Physics p.2/22

  • What is Fortran 90?

    Fortran 90/95 and Computational Physics p.3/22

  • The Origin

    A team lead by John Backus developedFortran, FORmula TRANslation System, in1954, one of the earliest high-level langua-ges.

    1966: The first ever standard for a programming language:Fortran 66

    New standard 1978: Fortran 77

    The need to modernise the language Fortran 90/95

    Fortran 90/95 and Computational Physics p.4/22

  • The Origin

    A team lead by John Backus developedFortran, FORmula TRANslation System, in1954, one of the earliest high-level langua-ges.

    1966: The first ever standard for a programming language:Fortran 66

    New standard 1978: Fortran 77

    The need to modernise the language Fortran 90/95

    Fortran 90/95 and Computational Physics p.4/22

  • Fortran 90

    http://csep1.phy.ornl.gov/pl/pl.html

    Fortran 90/95 and Computational Physics p.5/22

    http://csep1.phy.ornl.gov/pl/pl.html

  • Why Fortran 90?

    Fortran 90/95 and Computational Physics p.6/22

  • How does F90 compare?

    http://csep1.phy.ornl.gov/pl/pl.html

    One of the ultimate goals of F90 is that the code must beefficient

    Fortran 90/95 and Computational Physics p.7/22

    http://csep1.phy.ornl.gov/pl/pl.html

  • Numerical Libraries

    Fortran has been widely used by scientist and engineers formany years and therfore many algorithms to use innumerical calculations already exist.

    These have been collected in number of numerical libraries,some open (e.g. SLATEC http://www.netlib.org/slatec/ andNumerical Recipes http://www.nr.com/)and some that cost (e.g. NAG http://www.nag.co.uk).

    Fortran 90/95 and Computational Physics p.8/22

    http://www.netlib.org/slatec/http://www.nr.com/http://www.nag.co.uk

  • Some F90 Features

    Fortran 90/95 and Computational Physics p.9/22

  • The Constructs

    F90 has many familiar constructs:

    IF (expr) ...

    IF (expr) THEN...END IF

    DO i = 1, n...END DO

    Other forms of the DO construct

    CASE

    Fortran 90/95 and Computational Physics p.10/22

  • The Constructs

    F90 has many familiar constructs:

    IF (expr) ...

    IF (expr) THEN...END IF

    DO i = 1, n...END DO

    Other forms of the DO construct

    CASE

    Fortran 90/95 and Computational Physics p.10/22

  • The Constructs

    F90 has many familiar constructs:

    IF (expr) ...

    IF (expr) THEN...END IF

    DO i = 1, n...END DO

    Other forms of the DO construct

    CASE

    Fortran 90/95 and Computational Physics p.10/22

  • The Constructs

    F90 has many familiar constructs:

    IF (expr) ...

    IF (expr) THEN...END IF

    DO i = 1, n...END DO

    Other forms of the DO construct

    CASE

    Fortran 90/95 and Computational Physics p.10/22

  • The Constructs

    F90 has many familiar constructs:

    IF (expr) ...

    IF (expr) THEN...END IF

    DO i = 1, n...END DO

    Other forms of the DO construct

    CASE

    Fortran 90/95 and Computational Physics p.10/22

  • Numeric Kind Parameterisation

    Program test_kind

    Implicit none

    Real :: a

    ! selected_real_kind([p][,r]) p = precision, r = range

    Integer, parameter :: long = selected_real_kind(9,99)

    Real(long) :: b

    a = 1.7; b = 1.7_long

    Print *, a,kind(a), precision(a), range(a)

    Print *, b,kind(b), precision(b), range(b)

    b = 1.7; print *, b

    b = 1.7D0; print *,b

    End Program test_kind

    Fortran 90/95 and Computational Physics p.11/22

  • IMPLICIT NONE

    Strong typing: all typed entities must have their typesspecified explicitly

    By default an entity in Fortran that has not been assigned atype is implicitly typed, e.g. entities that begin with i,j, ... areof type integer dangerous source of errors

    (Legend has it that error of this type caused the crash of the American Space Shuttle)

    The statement IMPLICIT NONE turns on strong typing and

    its use is strongly recommended

    Fortran 90/95 and Computational Physics p.12/22

  • Modules - Simple Example

    MODULE constants

    IMPLICIT NONE

    INTEGER, PARAMETER :: long = SELECTED_REAL_KIND(15,307)

    REAL(long), PARAMETER :: pi = 3.14159265358979324D0

    END MODULE constants

    PROGRAM module_example

    USE constants

    IMPLICIT NONE

    REAL(long) :: a

    a = 2D0*pi

    print*, a

    END PROGRAM module_example

    Fortran 90/95 and Computational Physics p.13/22

  • Modules - Another Example

    MODULE circle

    USE constants

    IMPLICIT NONE

    CONTAINS

    FUNCTION area(r)

    REAL(long), INTENT(IN) :: r

    REAL(long) :: area

    area = 2D0*pi*r

    END FUNCTION area

    FUNCTION circumference(r)

    REAL(long), INTENT(IN) :: r

    REAL(long) :: circumference

    circumference = pi*r**2

    END FUNCTION circumference

    END MODULE circle

    Fortran 90/95 and Computational Physics p.14/22

  • Modules - Another Example - cont.

    PROGRAM module_example2

    USE constants

    USE circle

    IMPLICIT NONE

    REAL(long) :: r, A, C

    r = 2

    A = area(r)

    C = circumference(r)

    print*, A, C

    END PROGRAM module_example2

    Fortran 90/95 and Computational Physics p.15/22

  • Array Features

    PROGRAM array

    USE constants

    IMPLICIT NONE

    REAL(long), DIMENSION(10,10) :: a

    REAL(long), DIMENSION(5,5) :: b,c

    REAL(long) :: d

    a = 1D0; b = 2D0

    c = MATMUL(a(1:5,6:10),b)

    c = c + b

    d = SUM(c)

    print*, d

    END PROGRAM array

    Fortran 90/95 and Computational Physics p.16/22

  • External Subroutines

    SUBROUTINE area_rectangle(l,b,A)

    USE constants

    IMPLICIT NONE

    REAL(long), DIMENSION(:,:), INTENT(IN) :: l,b

    REAL(long), DIMENSION(size(l,1), size(l,2)) :: A

    A = l*b

    END SUBROUTINE area_rectangle

    Fortran 90/95 and Computational Physics p.17/22

  • External Subroutines - cont.

    PROGRAM subr_example

    USE constants

    IMPLICIT NONE

    INTERFACE

    SUBROUTINE area_rectangle(l,b,A)

    USE constants

    IMPLICIT NONE

    REAL(long), DIMENSION(:,:), INTENT(IN) :: l,b

    REAL(long), DIMENSION(size(l,1), size(l,2)), INTENT(OUT) :: A

    END SUBROUTINE area_rectangle

    END INTERFACE

    REAL(long), DIMENSION(2,2) :: l,b,A

    l = 1D0; b = 2D0

    CALL area_rectangle(l,b,A); print*, A

    END PROGRAM subr_example

    Fortran 90/95 and Computational Physics p.18/22

  • External Subroutines - cont.

    External subroutines are implicitly interfaced whilemodule subroutines are explicitly interfaced

    External subroutines can be made explicitly interfacedby the use of an interface block

    Grouping related procedures and parameters intomodules is good programming

    We imagine subprogram libraries being written as sets of externalsubprograms together with modules holding interface blocks forthem. Metcalf & Reid

    Fortran 90/95 and Computational Physics p.19/22

  • External Subroutines - cont.

    External subroutines are implicitly interfaced whilemodule subroutines are explicitly interfaced

    External subroutines can be made explicitly interfacedby the use of an interface block

    Grouping related procedures and parameters intomodules is good programming

    We imagine subprogram libraries being written as sets of externalsubprograms together with modules holding interface blocks forthem. Metcalf & Reid

    Fortran 90/95 and Computational Physics p.19/22

  • External Subroutines - cont.

    External subroutines are implicitly interfaced whilemodule subroutines are explicitly interfaced

    External subroutines can be made explicitly interfacedby the use of an interface block

    Grouping related procedures and parameters intomodules is good programming

    We imagine subprogram libraries being written as sets of externalsubprograms together with modules holding interface blocks forthem. Metcalf & Reid

    Fortran 90/95 and Computational Physics p.19/22

  • External Subroutines - cont.

    External subroutines are implicitly interfaced whilemodule subroutines are explicitly interfaced

    External subroutines can be made explicitly interfacedby the use of an interface block

    Grouping related procedures and parameters intomodules is good programming

    We imagine subprogram libraries being written as sets of externalsubprograms together with modules holding interface blocks forthem. Metcalf & Reid

    Fortran 90/95 and Computational Physics p.19/22

  • Summary

    Fortran 90/95 and Computational Physics p.20/22

  • Summary

    Fortran has from the beginning been designed fornumerical calculations

    The Fortran 90 standard modernised the language

    Array features make F90 especially attracting fornumerical work

    Fortran is fast

    Fortran 90/95 and Computational Physics p.21/22

  • Resources

    CSEP. Fortran 90 and Computational Science.Technical report, Oak Ridge National Laboratory, 1994http://csep1.phy.ornl.gov/CSEP/PL/PL.html

    The Liverpool Fortran 90 courses homepagehttp://www.liv.ac.uk/HPC/F90page.html

    Michael Metcalf and John Reid. Fortran 90/95 explained,second edition. Oxford, 1999

Recommended

View more >