37
FORTRAN 90+ Yetmen Wang

FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Embed Size (px)

Citation preview

Page 1: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

FORTRAN 90+

Yetmen Wang

Page 2: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

FORmula TRANslation

Developed by the IBM team led by John Backus

The first high-level programming language

Mainly intended for mathematical computations

Areas of Application

Numerical Analysis

System Simulation

Scientific Computations

Engineering Procedures

IntroductionIntroduction

Page 3: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

Fortran HistoryFortran History

Published by IBM in 1957

MS PowerStation 4.0

Sold to Digital with DEC, it developed into Digital Visual Fotran 5.x

Digital was later merged with Compaq; CVF 6.x emerged

CVF development team was purchased by Intel

HP merged with Compaq, introducing HP CVF 6.6a

Intel Fortran, combining CVF, developed Intel Visual Fortran 8.x

Page 4: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

Fortran VersionsFortran Versions

1962 FORTRAN IV

1966 FORTRAN 66

1978 FORTRAN 77

1992 FORTRAN 90

Array

Semi-OOP

Resembles MATLAB

1997 FORTRAN 95

HPF extension

more OOP

2003 FORTRAN 2000

Fully OOP

Page 5: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

StrengthsStrengths

Array language and object-oriented programming

Higher computational speed compared to C/C++ and MATLAB

Maintains plenty of legacy codes

Easy-to-learn compared to C/C++

The majority of individuals in the numerical computing field still use

Fortran to develop program(s)

Page 6: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

WeaknessesWeaknesses

File I/O is difficult to modify and comprehend

Low reusability and high cost of code maintenance

Lack of numerical and graphical libraries

Difficult to convert the codes into applications

Platform porting

Interfacing to other language

Page 7: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

A good descriptionof Fortran

programing.

PROGRAM name

IMPLICIT NONE

STOP

END

declarations

statements

Program StructureProgram Structure

Page 8: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

Significant FeaturesSignificant Features

New Source FormNew Source Form

Object-Oriented ProgrammingObject-Oriented Programming

Array ProgrammingArray Programming

Dynamic Memory AllocationDynamic Memory Allocation

PointerPointer

Page 9: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

New Source FormNew Source Form

Free FormatFree Format

IMPLICIT NONEIMPLICIT NONE

StatementsStatements

Page 10: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

New Source Form – Free FormatNew Source Form – Free Format

names of variables may consist of up to 31 characters

132 characters per line

up to 39 continuation lines

blanks are significant

& as line continuation character

; as statement separator for multiple statements per line

! as comment symbol

Page 11: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

New Source Form - IMPLICIT NONENew Source Form - IMPLICIT NONE

The first line after any USE statements

Used to inhibit the old Fortran feature that treats, by default, all

variable beginning with the letters I, j, k, l, m, and n as integers and

others as real arguments

IMPLICIT NONE should always be used to prevent potential confusion

in variable types

Upper and lowercase letters are equivalent

Page 12: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

New Source Form - StatementsNew Source Form - Statements

INCLUDE can be used to include source text from external files

END DO statements are used to complete DO loops

Relational Operator Alternatives .LT. <

.LE. <=

.EQ. ==

.NE. /=

.GE. >

.GT. =>

Page 13: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

Object-Oriented ProgrammingObject-Oriented Programming

FunctionalityFunctionality

TYPETYPE

MODULEMODULE

AttributesAttributes

INTERFACEINTERFACE

OverloadOverload

Page 14: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

Object-Oriented Programming - FunctionalityObject-Oriented Programming - Functionality

Data Abstraction

Data Hiding

Encapsulation

Inheritance

Polymorphism

Reusability

Page 15: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

Object-Oriented Programming – TYPEObject-Oriented Programming – TYPE

user-defined TYPE

A new type can be defined in a derived-type statement, which can later

be used to describe an object

Example I

Create a type COORDS_3D with three REAL components X, Y, and Z.

TYPE :: COORDS_3D

REAL :: X, Y, Z

END TYPE COORDS_3D

Create a variable of type COORDS_3D with values 0.0, 1.0, and 5.0.

TYPE(COORDS_3D) :: Pt

Pt%X = 0.0

Pt%Y = 1.0

Pt%Z = 5.0

Page 16: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

Object-Oriented Programming – TYPEObject-Oriented Programming – TYPE

user-defined TYPE

Example II

Create a type NONZERO in which nonzero matrix elements are described.

TYPE :: NONZERO

REAL :: VALUE

INTEGER :: ROW, COLUMN

END TYPE NONZERO

Create a sparse matrix A with 100 nonzero elements.

TYPE(NONZERO) :: A(100)

Obtain the value of A(10).

X = A(10)%Value

Page 17: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

Object-Oriented Programming – MODULEObject-Oriented Programming – MODULE

MODULE / MODULE PROCEDURE

A collection of data, type definitions, and procedure definitions which

can be exploited by any other program unit attaching it (via the USE

statement).

Example

MODULE point_module

TYPE point

REAL :: x, y

END TYPE point

CONTAINS

FUNCTION addpoints(p, q)

TYPE (point), INTENT(IN) :: p, q

TYPE (point) :: addpoints

addpoints%x = p%x + q%x

addpoints%y = p%y + q%y

END FUNCTION addpoints

END MODULE point_module

Main Program

.

.

.

USE point_module

TYPE (point) :: px, py,

pz

.

.

.

pz = addpoints(px,py)

Accesses the module.

Page 18: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

Object-Oriented Programming – ATTRIBUTESObject-Oriented Programming – ATTRIBUTES

PUBLIC and PRIVATE attributes

PRIVATE – variables/subroutines/functions defined can only be used

in the specified module

PUBLIC – variables/subroutines/functions defined can be used publicly

Example

MODULE bank

PRIVATE money

PUBLIC SaveMoney

integer :: money = 1000000

CONTAINS

     SUBROUTINE SaveMoney(num)

         integer :: num

         money = money+num

         return

END SUBROUTINE

END MODULE

Page 19: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

Object-Oriented Programming – INTERFACEObject-Oriented Programming – INTERFACE

INTERFACE

A way to specify information for an external procedure

Name of the procedure

Types of passed and returned parameters

Whether an argument may be changed

INTERFAXE detects incorrect calls at compile time

Example

INTERFACE

REAL FUNCTION DISTANCE( A, B)

REAL, INTENT(IN) :: A, B

END FUNCTION DISTANCE

END INTERFACE

Page 20: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

Object-Oriented Programming – OverloadObject-Oriented Programming – Overload

Overload Operators

Operators can be overloaded to clarify unambiguous definitions

Intrinsic operators can be overloaded to apply to all types in a program

Overloading is encapsulated in a module

generic operator symbol in an INTERFACE OPERATOR

statement

overload set in a generic interface

Example

INTERFACE OPERATOR(-)

FUNCTION DIFF(A,B)

TYPE(POINT) :: DIFF, A, B

END FUNCTION

END INTERFACE

Page 21: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

Array ProgrammingArray Programming

Whole ArrayWhole Array

Array SectionArray Section

Intrinsic FunctionsIntrinsic Functions

Page 22: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

Array Programming – Whole ArrayArray Programming – Whole Array

Assignment

All arrays must conform

The operation is applied to each element of the array

Scalars broadcast

Declarations

REAL, DIMENSION(5, 5) :: A, B

OR

REAL :: A(5,5), B(5,5)

Page 23: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

Array Programming – Whole ArrayArray Programming – Whole Array

Operation

Example

Assume A and B to be two 2D arrays of the same shape. Multiply them and assign the result to array C.

FORTRAN 77

REAL A(5, 5), B(5, 5), C(5, 5)

...

i LOOP

j LOOP

C(j, i) = A(j, i) * B(j, i)

END i LOOP

END j LOOP

FORTRAN 90+

REAL, DIMENSION (5, 5) :: A, B, C

...

C = A * B

2121 1212

88 2525

1818 4242

3636 7777

77 22

22 55

99 66

44 77

33 66

44 55

22 77

99 1111

= x

Page 24: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

Array Programming – Array SectionArray Programming – Array Section

Declaration

REAL, DIMENSION(10, 10) :: A

Subscript Notation

( [row lower bound] : [row upper bound] : [row stride],

[column lower bound] : [column upper bound] : [column stride] )

Page 25: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

Array Programming – Array SectionArray Programming – Array Section

Example

REAL :: A(10, 10)

11 22 33 44 55 66 77 88 99

11

22

33

44

55

66

77

88

99

A(2:6, 4:8) A(:, 1:3)

11 22 33 44 55 66 77 88 99

11

22

33

44

55

66

77

88

99

Page 26: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

Array Programming – Array SectionArray Programming – Array Section

Example

REAL :: A(10, 10)

A(4:10, 5) A(1:10:2, 1:10:2)

11 22 33 44 55 66 77 88 99

11

22

33

44

55

66

77

88

99

11 22 33 44 55 66 77 88 99

11

22

33

44

55

66

77

88

99

INTRODUCTION

Page 27: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

Array Programming – Intrinsic FunctionsArray Programming – Intrinsic Functions

Functions

array manipulations

CSHIFT and EOSHIFT for shifts along array axis

TRANSPOSE for the transpose of a matrix

reduction functions

SUM , PRODUCT , MAXVAL , MINVAL , COUNT , ALL , and ANY

inquiry functions

SHAPE , SIZE, ALLOCATED, LBOUND, and UBOUND

array constructor functions

MERGE, SPREAD, RESHAPE, PACK and UNPACK

Page 28: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

Array Programming – Intrinsic FunctionsArray Programming – Intrinsic Functions

Example - CSHIFT

FORTRAN 77

REAL :: A(0:99), B(0:99)

DO i = 0, 99

B(i) = ( A( mod(i+99, 100) ) +

A( mod(i+1, 100) ) ) / 2

ENDDO

FORTRAN 90+

REAL :: A(100), B(100)

B = ( CSHIFT(A, +1) + CSHIFT(A, -1) ) / 2

Page 29: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

PointerPointer

IntroductionIntroduction

Association StatusAssociation Status

ExampleExample

Page 30: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

Pointer - IntroductionPointer - Introduction

A pointer has the POINTER attribute and may point to another data

object of the same type, which has the TARGET attribute or an area of

dynamically allocated memory.

Uses

Alternative to allocatable arrays

A tool to create and manipulate dynamic data structures

Declarations

REAL, POINTER :: Ptr(:, :)

REAL, TARGET :: TA(:, :)

ADDRESSADDRESS DESCRIPTORDESCRIPTOR

TARGETTARGET

Page 31: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

Pointer – Association StatusPointer – Association Status

Status

Undefined – initially specified in a type declaration statement

Associated – points to a target

Null – nullified by a NULLIFY or a DEALLOCATE statement

NULLIFY(Ptr)

DEALLOCATE(Ptr, STAT = ierr)

Pointer

Pointer

Pointer

?

Target

NULL

Page 32: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

Pointer - ExamplePointer - Example

Example

REAL, TARGET :: A

REAL, POINTER :: P, Q

A = 3.14

P => A

Q => P

A = 2.718

WRITE(*,*) Q

Q outputs 2.718

Q => P and P => A

Therefore, Q => A, whose value has changed from 3.14 to 2.718

Page 33: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

Dynamic StorageDynamic Storage

Allocatable ArrayAllocatable Array

PointerPointer

Page 34: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

Dynamic Storage – Allocatable ArrayDynamic Storage – Allocatable Array

Acquire and return a storage area in HEAP MEMORY for an array with attributes

Example

REAL, DIMENSION(:), ALLOCATABLE :: A

ALLOCATE( A(5:5) )

A(j) = q ! assignment of the array

CALL sub(A) ! Use of the array in a subroutine

Deallocation occurs automatically reaching RETURN or END in the

program

To prevent memory leak, allocatable arrays should be explicitly

deallocated

DEALLOCATE (A)

Page 35: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

Dynamic Storage - PointerDynamic Storage - Pointer

Use a pointer

Can be passed to a procedure in an unallocated state

An explicit INTERFACE is required when passing a pointer to a

procedure

Page 36: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

Dynamic Storage - PointerDynamic Storage - Pointer

Use a pointer

Example

Subroutine Procedure:

SUBROUTINE SUB(B)

REAL, DIMENSION (:,:), POINTER :: B

INTEGER M, N ! Assign M and N

ALLOCATE (B(M,N)) ! Allocate B as a matrix

END SUBROUTINE SUB

Main Program:

INTERFACE

SUBROUTINE SUB(B)

REAL, DIMENSION (:,:), POINTER :: B

END SUBROUTINE SUB

END INTERFACE

REAL, DIMENSION (:,:), POINTER :: A

CALL SUB(A) ! matrix A is called and allocated in the

subroutine

Page 37: FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT

Fortran 90/95/2000

INTRODUCTION

FORTRAN VERSIONS

PROGRAM STRUCTURE

NEW SOURCE FORM

OO PROGRAMMING

ARRAY PROGRAMMING

SIGNIFICANT FEATURES

FORTRAN HISTORY

STRENGTHS

WEAKENESSES

POINTER

DYNAMIC STORAGE

THANK YOU!