Introduction to Fortran 90 Si Liu July 19, 2010 NCAR/CISL/OSD/HSS Consulting Services Group.

Slides:



Advertisements
Similar presentations
Introduction to arrays
Advertisements

879 CISC Parallel Computation High Performance Fortran (HPF) Ibrahim Halil Saruhan Although the [Fortran] group broke new ground …
Chapter 7 Introduction to Procedures. So far, all programs written in such way that all subtasks are integrated in one single large program. There is.
Programming Languages and Paradigms
PL/SQL.
Names and Bindings.
Chapter 7: User-Defined Functions II
Introduction to C Programming
The new features of Fortran 2003 David Muxworthy BSI Fortran Convenor.
Computational Methods of Scientific Programming Lecturers Thomas A Herring, Room A, Chris Hill, Room ,
Fortran: Array Features Session Five ICoCSIS. Outline 1.Zero-sized Array 2.Assumed-shaped Array 3.Automatic Objects 4.Allocation of Data 5.Elemental Operations.
Arrays Array Terminology Declarations Visualisation of Arrays Array Conformance Array Element Ordering Array Syntax Whole Array Expressions Array Sections.
Introduction to Fortran Fortran Evolution Drawbacks of FORTRAN 77 Fortran 90 New features Advantages of Additions.
 2007 Pearson Education, Inc. All rights reserved Introduction to C Programming.
Fortran 9x HTML version. New F90 features Free source form Modules User-defined data types and operators Generic user-defined procedures Interface blocks.
1 Chapter 2 Basic Fortran. 2 Attendance Requirements  Attendance is required for both class and lab. hours  Minimum %70 for class attendance  Minimum.
Chapter 9 Modules and Programming with Functions.
Chapter 8 ARRAYS. 2 Array subscript expressions  Each subscript in an array element designator is an expression of integer type. It need not be a constant.
FORTRAN.  Fortran or FORmula TRANslation was developed in the 1950's by IBM as an alternative to Assembly Language. First successfull high level language.
Programming Logic and Design, Introductory, Fourth Edition1 Understanding Computer Components and Operations (continued) A program must be free of syntax.
Introduction to C Programming
CHAPTER 6 FILE PROCESSING. 2 Introduction  The most convenient way to process involving large data sets is to store them into a file for later processing.
Chapter 12 Pointers and linked structures. 2 Introduction  The data structures that expand or contract as required during the program execution is called.
Fortran- Subprograms Chapters 6, 7 in your Fortran book.
Fortran: Specification Statements Session Six ICoCSIS.
Introduction to FORTRAN
1 Chapter 5: Names, Bindings and Scopes Lionel Williams Jr. and Victoria Yan CSci 210, Advanced Software Paradigms September 26, 2010.
1 Week 12 Arrays, vectors, matrices and cubes. Introduction to Scientific & Engineering Computing 2 Array subscript expressions n Each subscript in an.
Fortran: Program Units and Procedures Session Four ICoCSIS.
Fortran 1- Basics Chapters 1-2 in your Fortran book.
Multi-Dimensional Arrays
 2006 Pearson Education, Inc. All rights reserved Arrays.
Scientific Computing Division A tutorial Introduction to Fortran Siddhartha Ghosh Consulting Services Group.
Chapter 6: User-Defined Functions
Computer Science 101 Introduction to Programming.
FORTRAN FORmula TRANslator -Anand Trivedi. HISTORY  Designed and written from scratch in by an IBM team lead by John W. Backus as the first.
Chapter 8 High-Level Programming Languages. 8-2 Chapter Goals Describe the translation process and distinguish between assembly, compilation, interpretation,
Hello.java Program Output 1 public class Hello { 2 public static void main( String [] args ) 3 { 4 System.out.println( “Hello!" ); 5 } // end method main.
CIS-165 C++ Programming I CIS-165 C++ Programming I Bergen Community College Prof. Faisal Aljamal.
1 Serial Run-time Error Detection and the Fortran Standard Glenn Luecke Professor of Mathematics, and Director, High Performance Computing Group Iowa State.
ISBN Chapter 8 Statement-Level Control Structures.
Chapter 15 Introduction to PL/SQL. Chapter Objectives  Explain the benefits of using PL/SQL blocks versus several SQL statements  Identify the sections.
Other data types. Standard type sizes b Most machines store integers and reals in 4 bytes (32 bits) b Integers run from -2,147,483,648 to 2,147,483,647.
I Power Higher Computing Software Development High Level Language Constructs.
CONSTANTS Constants are also known as literals in C. Constants are quantities whose values do not change during program execution. There are two types.
8-1 Compilers Compiler A program that translates a high-level language program into machine code High-level languages provide a richer set of instructions.
Lecture III Start programming in Fortran Yi Lin Jan 11, 2007.
FORTRAN History. FORTRAN - Interesting Facts n FORTRAN is the oldest Language actively in use today. n FORTRAN is still used for new software development.
 In the java programming language, a keyword is one of 50 reserved words which have a predefined meaning in the language; because of this,
Introduction to Computer Sciences References: [1] Fortran 95/2003 for Scientists and Engineers (3e) by Stephen J. Chapman. [2] Using Fortran 90 by Chester.
FORTRAN 90+ Yetmen Wang Fortran 90/95/2000 INTRODUCTION FORTRAN VERSIONS PROGRAM STRUCTURE NEW SOURCE FORM OO PROGRAMMING ARRAY PROGRAMMING SIGNIFICANT.
CHAPTER 2 PROBLEM SOLVING USING C++ 1 C++ Programming PEG200/Saidatul Rahah.
2: Basics Basics Programming C# © 2003 DevelopMentor, Inc. 12/1/2003.
Fortran: Control Structures Session Three ICoCSIS.
Introduction to Fortran95 Programming Part II By Deniz Savas, CiCS, 2007
Definition of the Programming Language CPRL
Zuse’s Plankalkül – 1945 Never implemented Problems Zuse Solved
Def: A control structure is a control statement and
Type Checking, and Scopes
BASIC ELEMENTS OF A COMPUTER PROGRAM
Basic Elements of C++.
2. Understanding VB Variables
Array processing and Matrix manipulation
Basic Elements of C++ Chapter 2.
7 Arrays.
By Deniz Savas, CiCS, Shef. Univ., 2015
Web DB Programming: PHP
7 Arrays.
Programming Languages and Paradigms
Array processing and Matrix manipulation
Presentation transcript:

Introduction to Fortran 90 Si Liu July 19, 2010 NCAR/CISL/OSD/HSS Consulting Services Group

Syllabus  Introduction  Basic syntax  Arrays  Control structures  Scopes  I/O

Introduction  History  Objectives  Major new features  Other new features  Availability of compilers

History of Fortran FORTRAN is an acronym for FORmula TRANslation  IBM Fortran (1957)  Fortran 66 standard (1966)  Fortran 77 standard (1978)  Fortran 90 standard (1991)  Fortran 95 standard (1996)  Fortran 2003 standard  Fortran 2008 standard

Objective  Language evolution Obsolescent features  Standardize vendor extensions Portability  Modernize the language Ease-of-use improvements through new featuressuch as free source form and derived types Space conservation of a program with dynamic memory allocation Modularization through defining collections called modules Numerical portability through selected precision

Objective, continued  Provide data parallel capability Parallel array operations for better use of vector and parallel processors  Compatibility with Fortran 77 Fortran 77 is a subset of Fortran 90  Improve safety Reduce risk of errors in standard code  Standard conformance Compiler must report non standard code and obsolescent features

Major new features  Array processing  Dynamic memory allocation  Modules  Procedures: Optional/Keyword Parameters Internal Procedures Recursive Procedures  Pointers

Other new features  Free-format source code  Specifications/Implicit none  Parameterized data types (KIND)  Derived types  Operator overloading  New control structures  New intrinsic functions  New I/O features

Available Fortran 90 compilers  gfortran — the GNU Fortran compiler  Cray CF90  DEC Fortran 90  EPC Fortran 90  IBM XLF  Lahey LF90  Microway  NA Software F90+  NAG f90  Pacific Sierra VAST-90  Parasoft  Salford FTN90

First Fortran program Syntax Example1 helloworld Syntax Example1 helloworld syntax_ex1.f90 PROGRAM HelloWorld ! Hello World in Fortran 90 and 95 WRITE(*,*) "Hello World!" END PROGRAM Compile and run gfortran syntax_ex1.f90 -o syntax_ex1.o./syntax_ex1.o

Source form  Lines up to 132 characters  Lowercase letters permitted  Names up to 31 characters (including underscore)  Semicolon to separate multiple statements on one line  Comments may follow exclamation (!)  Ampersand (&) is a continuation symbol  Character set includes + ; ! ? % - “ &  New relational operators: ‘ =‘,’>’

Example: Source form free_source_form.f90 PROGRAM free_source_form ! Long names with underscores ! No special columns IMPLICIT NONE ! upper and lower case letters REAL :: tx, ty, tz ! trailing comment ! Multiple statements per line tx = 1.0; ty = 2.0; tz = tx * ty; ! Continuation on line to be continued PRINT *, & tx, ty, tz END PROGRAM free_source_form

Specifications type [[,attribute]... ::] entity list  type can be INTEGER, REAL, COMPLEX, LOGICAL, CHARACTER or TYPE with optional kind value: INTEGER [(KIND=] kind-value)] CHARACTER ([actual parameter list]) ([LEN=] len-value and/or [KIND=] kind-value) TYPE (type name)

Specifications, continued type [[,attribute]... ::] entity list  attribute can be PARAMETER, PUBLIC, PRIVATE, ALLOCATABLE, POINTER, TARGET, INTENT(inout), DIMENSION (extent-list), OPTIONAL, SAVE, EXTERNAL, INTRINSIC  Can initialize variables in specifications

Example: Specifications  ! Integer variables: INTEGER :: ia, ib  ! Parameters: INTEGER, PARAMETER :: n=100, m=1000  ! Initialization of variables: REAL :: a = , b =  ! Logical variable LOGICAL :: E=.False.

Example: Specifications  ! Character variable of length 20: CHARACTER (LEN = 20) :: ch  ! Integer array with negative lower bound: INTEGER, DIMENSION(-3:5, 7) :: ia  ! Integer array using default dimension: INTEGER,DIMENSION(-3:5, 7) :: ib, ic(5, 5)

IMPLICIT NONE  In Fortran 77, implicit typing permitted use of undeclared variables. This has been the cause of many programming errors.  IMPLICIT NONE forces you to declare the type of all variables, arrays, and functions.  IMPLICIT NONE may be preceded in a program unit only by USE and FORMAT.  It is recommended to include this statement in all program units.

Kind Values  5 intrinsic types: REAL, INTEGER, COMPLEX, CHARACTER, LOGICAL  Each type has an associated non negative integer value called the KIND type parameter  Useful feature for writing portable code requiring specified precision  A processor must support at least 2 kinds for REAL and COMPLEX, and 1 for INTEGER, LOGICAL and CHARACTER  Many intrinsics for enquiring about and setting kind values

Example: Kind Values  INTEGER(8) :: I  REAL(KIND=4) :: F  CHARACTER(10) :: C  INTEGER :: IK=SELECTED_INT_KIND(9)  INTEGER :: IR=SELECTED_REAL_KIND(3,10)

Kind values: INTEGER INTEGER (KIND = wp) :: ia ! or INTEGER(wp) :: ia  Integers usually have 16, 32, or 64 bit  16 bit integer normally permits < i <  Kind values are system dependent An 8 byte integer variable usually has kind value 8 or 2 A 4 byte integer variable usually has kind value 4 or 1

Kind values: INTEGER, continued  To declare integer in system independent way, specify kind value associated with range of integers required: INTEGER, PARAMETER :: & i8 =SELECTED_INT_KIND(8) INTEGER (KIND = i8) :: ia, ib, ic ia, ib and ic can have values between and at least (if permitted by processor).

Kind values: REAL REAL (KIND = wp) :: ra ! or REAL(wp) :: ra  Declare a real variable, ra, whose precision is determined by the value of the kind parameter, wp  Kind values are system dependent An 8 byte (64 bit) real variable usually has kind value 8 or 2. A 4 byte (32 bit) real variable usually has kind value 4 or 1.  Literal constants set with kind value: const = 1.0_wp

Kind values: REAL,continued  To declare real in system independent way, specify kind value associated with precision and exponent range required: INTEGER, PARAMETER :: & i10 = SELECTED_REAL_KIND(10, 200) REAL (KIND = i10) :: a, b, c a, b and c have at least 10 decimal digits of precision and the exponent range 200.

Kind values: Intrinsics INTEGER, PARAMETER :: & i8 = SELECTED_INT_KIND(8) INTEGER (KIND = i8) :: ia PRINT *, KIND(ia) This will print the kind value of ia. INTEGER, PARAMETER :: & i10 = SELECTED_REAL_KIND(10, 200) REAL (KIND = i10) :: a PRINT *, RANGE(a), PRECISION(a), KIND(a) This will print the exponent range, the decimal digits of precision and the kind value of a.

Syntax Example 2 syntax_ex2.f90 Program Triangle 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) end program Triangle

Syntax Example 2Syntax Example 2, continued Function Area(x,y,z) implicit none ! function type real :: Area real, intent (in) :: x, y, z real :: theta, height theta = acos((x**2+y**2-z**2)/(2.0*x*y)) height = x*sin(theta) Area = 0.5*y*height end function Area

Types exercise 1 solutions

Derived Types (structures)  Defined by user  Can include different intrinsic types and other derived types  Components accessed using percent (%)  Only assignment operator (=) is defined for derived types  Can (re)define operators

Example: Derived Types  Define the form of derived type TYPE vreg CHARACTER (LEN = 1) :: model INTEGER :: number CHARACTER (LEN = 3) :: place END TYPE vreg  Create the structures of that type TYPE (vreg) :: mycar1, mycar2  Assigned by a derived type constant mycar1 = vreg(’L’, 240, ’VPX’)  Use % to select a component of that type mycar2%model = ’R’

Example: Derived Types  Arrays of derived types: TYPE (vreg), DIMENSION (n) :: mycars  Derived type including derived type: TYPE household CHARACTER (LEN = 30) :: name CHARACTER (LEN = 50) :: address TYPE (vreg) :: car END TYPE household TYPE (household) :: myhouse myhouse%car%model = ’R’

Control Structures  Three block constructs IF DO and DO WHILE CASE  All can be nested  All may have construct names to help readability or to increase flexibility

Control structure: IF [name:]IF (logical expression) THEN block [ELSE IF (logical expression) THEN [name] block]... [ELSE [name] block] END IF [name]

Example: IF IF (i < 0) THEN CALL negative ELSE IF (i == 0) THEN CALL zero ELSE selection CALL positive END IF

Control Structure: Do [name:] DO [control clause] block END DO [name] Control clause may be: an iteration control clause count = initial, final [,inc] a WHILE control clause WHILE (logical expression) or nothing (no control clause at all)

Example: DO Iteration control clause: rows: DO i = 1, n cols: DO j = 1, m a(i, j) = i + j END DO cols END DO rows

Example: DO WHILE control clause: true: DO WHILE (i <= 100)... body of loop... END DO true

Use of EXIT and CYCLE  exit from loop with EXIT  transfer to END DO with CYCLE  EXIT and CYCLE apply to inner loop by default, but can refer to specific, named loop

Example: Do outer: DO i = 1, n middle: DO j = 1, m inner: DO k = 1, l IF (a(i,j,k) < 0.0) EXIT outer ! leave loops IF (j == 5) CYCLE middle ! set j = 6 IF (i == 5) CYCLE ! skip rest of inner... END DO inner END DO middle END DO outer

Example: DO No control clause: DO READ (*, *) x IF (x < 0) EXIT y = SQRT(x)... END DO Notice that this form can have the same effect as a DO WHILE loop.

Control Structures: CASE  Structured way of selecting different options, dependent on value of single Expression  Replacement for computed GOTO or IF... THEN... ELSE IF... END IF constructs

Control Structure: CASE General form: [name:] SELECT CASE (expression) [CASE (selector) [name] block]... END SELECT [name]

Control Structure: CASE  expression - character, logical or integer  selector - DEFAULT, or one or more values of same type as expression: single value range of values separated by : (character or integer only), upper or lower value may be absent list of values or ranges

Example: CASE hat: SELECT CASE (ch) CASE (’C’, ’D’, ’G’:’M’) color = ’red’ CASE (’X’) color = ’green’ CASE DEFAULT color = ’blue’ END SELECT hat

Arrays  Terminology  Specifications  Array constructors  Array assignment  Array sections

Arrays, continued  Whole array operations  WHERE statement and construct  Allocatable arrays  Assumed shape arrays  Array intrinsic procedures

Specifications type [[,DIMENSION (extent-list)] [,attribute]... ::] entity-list where:  type - INTRINSIC or derived type  DIMENSION - Optional, but required to define default dimensions  (extent-list) - Gives array dimension: Integer constant integer expression using dummy arguments or constants. if array is allocatable or assumed shape.  attribute - as given earlier  entity-list - list of array names optionally with dimensions and initial values. REAL, DIMENSION(-3:4, 7) :: ra, rb INTEGER, DIMENSION (3) :: ia = (/ 1, 2, 3 /), ib = (/ (i, i = 1, 3) /)

Terminology  Rank:Number of dimensions  Extent:Number of elements in a dimension  Shape:Vector of extents  Size:Product of extents  Conformance: Same shape REAL, DIMENSION :: a(-3:4, 7) REAL, DIMENSION :: b(8, 2:8) REAL, DIMENSION :: d(8, 1:8)

Array Constructor  Specify the value of an array by listing its elements p = (/ 2, 3, 5, 7, 11, 13, 17 /)  DATA REAL RR(6) DATA RR /6*0/  Reshape REAL, DIMENSION (3, 2) :: ra ra = RESHAPE( (/ ((i + j, i = 1, 3), j = 1, 2) /), & SHAPE = (/ 3, 2 /) )

Array sections A sub-array, called a section, of an array may be referenced by specifying a range of subscripts, either:  A simple subscript a (2, 3) ! single array element  A subscript triplet [lower bound]:[upper bound] [:stride] a(1:3,2:4) defaults to declared bounds and stride 1  A vector subscript iv =(/1,3,5/) rb=ra(iv)

Array assignment Operands must be conformable REAL, DIMENSION (5, 5) :: ra, rb, rc INTEGER :: id... ra = rb + rc * id ! Shape(/ 5, 5 /) ra(3:5, 3:4) = rb(1::2, 3:5:2) + rc(1:3, 1:2) ! Shape(/ 3, 2 /) ra(:, 1) = rb(:, 1) + rb(:, 2) + rb(:, 3) ! Shape(/ 5 /)

Whole array operations  Arrays for whole array operation must be conformable  Evaluate element by element, i.e., expressions evaluated before assignment  Scalars broadcast  Functions may be array valued

Whole array operations, continued Fortran 77: REAL a(20), b(20), c(20) … DO 10 i = 1, 20 a(i) = CONTINUE … DO 20 i = 1, 20 a(i) = a(i) / b(i) *SQRT(c(i)) 20 CONTINUE … Fortran 90: REAL, DIMENSION (20) :: a, b, c... a = … a = a / b * SQRT(c)...

Array examples  Array example 1 Array example 1  Array example 1 - Fortran 90 solution Array example 1 - Fortran 90 solution  Array example 2 Array example 2  Array example 2 - Fortran 90 solution Array example 2 - Fortran 90 solution

Where statement Form: WHERE (logical-array-expr) array-assignments ELSEWHERE array-assignments END WHERE REAL DIMENSION (5, 5) :: ra, rb WHERE (rb > 0.0) ra = ra / rb ELSEWHERE ra = 0.0 END WHERE Another example: where_ex.f90

Allocatable arrays  A deferred shape array which is declared with the ALLOCATABLE attribute  ALLOCATE(allocate_object_list [, STAT= status])  DEALLOCATE(allocate_obj_list [, STAT= status])  When STAT= is present, status = 0 (success) or status > 0 (error). When STAT= is not present and an error occurs, the program execution aborts REAL, DIMENSION (:, :), ALLOCATABLE :: ra INTEGER :: status READ (*, *) nsize1, nsize2 ALLOCATE (ra(nsize1, nsize2), STAT = status) IF (status > 0) STOP ’Fail to allocate meomry’... IF (ALLOCATED(ra)) DEALLOCATE (ra)...

Allocatable array Array example 3 - allocatable array

Scopes The scope of a named entity or label is the set of non- overlapping scoping units where that name or label may be used unambiguously. A scoping unit is one of the following:  a derived type definition,  a procedure interface body, excluding any derived-type definitions and interface bodies contained within it,  a program unit or an internal procedure, excluding derived-type definitions, interface bodies, and subprograms contained within it.

Scopes: Labels and names  The scope of a label is a main program or a procedure, excluding any internal procedures contained within it.  Entities declared in different scoping unit are always different.  Within a scoping unit, each named entity must have a distinct name, with the exception of generic names of procedures.  The names of program units are global, so each must distinct from the others and from any of the local entities of the program unit.  The scope of a name declared in a module extends to any program units that USE the module.

Scope example scope_ex1.f90

I/O

Namelist  Gather set of variables into group to simplify I/O  General form of NAMELIST statement: NAMELIST /namelist-group-name/ variable-list  Use namelist-group-name as format instead of io-list on READ and WRITE  Input record has specific format: &namelist-group-name var2=x, var1=y, var3=z/  Variables optional and order unimportant

Example: Namelist... INTEGER :: size = 2 CHARACTER (LEN = 4) :: & color(3) = (/ ’ red’, ’pink’, ’blue’ /) NAMELIST /clothes/ size, color WRITE(*, NML = clothes)... outputs: &CLOTHES SIZE= 2, COLOR= red,pink,blue, /

Example: Formatted I/O PROGRAM TEST_IO_1 IMPLICIT NONE INTEGER :: I,J REAL:: A,B READ *, I,J READ *,A,B PRINT *,I,J PRINT *,A,B END PROGRAM TEST_IO_1

Example: Formatted I/O PROGRAM TEST_IO_2 IMPLICIT NONE REAL A,B,C WRITE(*,*)"Please enter 3 real numbers:" READ(*,10)A,B,C WRITE(*,*)"These 3 real numbers are:" PRINT 20,A,B,C 10 FORMAT(3(F6.2,1X)) 20 FORMAT(1X,'A= ',F6.2,' B= ',F6.2,' C= ', F6.2) END PROGRAM TEST_IO_2

Example INTEGER :: rec_len... INQUIRE (IOLENGTH = rec_len) name, title, & age, address, tel... OPEN (UNIT = 1, FILE = ’test’, RECL = rec_len, & FORM = ’UNFORMATTED’)... WRITE(1) name, title, age, address, tel

INQUIRE by I/O list INQUIRE (IOLENGTH=length) output-list  To determine the length of an unformatted output item list  May be used as value of RECL specifier in subsequent OPEN statement

Example: Unformatted I/O Unformatted direct access I/O most efficient, but not human- readable You must open a file with the format=‘unformatted’ attribute in order to write data to it. Example: See io_ex4.f90 for detail … integer I, iu ! iu is the unit number for your file, foo.out real X :: 7.0 open (iu, form='unformatted',access='direct’,file='foo.out') do iter= 1,4 write (iu, rec=iter, X) end do close (iu)

Resources  CSG will provide Fortran 90 support. Walk-in, mail, phone, etc. (ML suite 42).  CSG-wiki –Fortran90 tutorial on+to+Fortran90https://wiki.ucar.edu/display/csg/Introducti on+to+Fortran90

Recommended text Full text on Books 24x7 in NCAR Library

References  Fortran 90: A Conversion Course for Fortran 77 Programmers OHP Overviews F Lin, S Ramsden, M A Pettipher, J M Brooke, G S Noland, Manchester and North HPC T&EC  An introduction to Fortran 90 and Fortran 90 for programmers A Marshall, University of Liverpool  Fortran 90 for Fortran 77 Programmers Clive page, University of Leicester

Acknowledgments Siddhartha Ghosh Davide Del Vento Rory Kelly Dick Valent Other colleagues from CISL Manchester and North HPC T&EC University of Liverpool for examples