Fortran 2003 Part 1. École normale supérieure L3 geosciences 2018/2019. Lionel GUEZ Laboratoire de météorologie dynamique Office E324

Similar documents
Built-in Types of Data

2 3. Syllabus Time Event 9:00{10:00 morning lecture 10:00{10:30 morning break 10:30{12:30 morning practical session 12:30{1:30 lunch break 1:30{2:00 a

Numerical Modelling in Fortran: day 2. Paul Tackley, 2017

FORTRAN Basis. PROGRAM LAYOUT PROGRAM program name IMPLICIT NONE [declaration statements] [executable statements] END PROGRAM [program name]

Lecture 2 FORTRAN Basics. Lubna Ahmed

Full file at

Our Strategy for Learning Fortran 90

Features of C. Portable Procedural / Modular Structured Language Statically typed Middle level language

Module 01: Introduction to Programming in Python

Fortran. (FORmula TRANslator) History

ME1107 Computing Y Yan.

Objectives. You will learn how to process data in ABAP

C++ Programming: From Problem Analysis to Program Design, Third Edition

Computer Science 121. Scientific Computing Winter 2016 Chapter 3 Simple Types: Numbers, Text, Booleans

Visual C# Instructor s Manual Table of Contents

These are reserved words of the C language. For example int, float, if, else, for, while etc.

Introduction to Engineering gii

ARRAYS COMPUTER PROGRAMMING. By Zerihun Alemayehu

Computer System and programming in C

Introduction to Fortran

Objectives. Chapter 2: Basic Elements of C++ Introduction. Objectives (cont d.) A C++ Program (cont d.) A C++ Program

Intrinsic Numeric Operations

Chapter 2: Basic Elements of C++

McTutorial: A MATLAB Tutorial

Chapter 2: Basic Elements of C++ Objectives. Objectives (cont d.) A C++ Program. Introduction

Learning Language. Reference Manual. George Liao (gkl2104) Joseanibal Colon Ramos (jc2373) Stephen Robinson (sar2120) Huabiao Xu(hx2104)

Allocating Storage for 1-Dimensional Arrays

Language Basics. /* The NUMBER GAME - User tries to guess a number between 1 and 10 */ /* Generate a random number between 1 and 10 */

Chapter 1 Summary. Chapter 2 Summary. end of a string, in which case the string can span multiple lines.

MATLAB Lesson I. Chiara Lelli. October 2, Politecnico di Milano

Pace University. Fundamental Concepts of CS121 1

Data Types and Basic Calculation

\n is used in a string to indicate the newline character. An expression produces data. The simplest expression

1 Characters & Strings in Fortran

The new features of Fortran 2003

The PCAT Programming Language Reference Manual

LESSON 1. A C program is constructed as a sequence of characters. Among the characters that can be used in a program are:

Chapter 4. Fortran Arrays

UNIT - I. Introduction to C Programming. BY A. Vijay Bharath

XQ: An XML Query Language Language Reference Manual

Math 2250 MATLAB TUTORIAL Fall 2005

Python. Objects. Geog 271 Geographic Data Analysis Fall 2010

Scheme Quick Reference

Dr Richard Greenaway

DEPARTMENT OF MATHS, MJ COLLEGE

Scheme Quick Reference

UNIT- 3 Introduction to C++

3. Java - Language Constructs I

The SPL Programming Language Reference Manual

Finding, Starting and Using Matlab

A First Look at ML. Chapter Five Modern Programming Languages, 2nd ed. 1

INTRODUCTION TO FORTRAN PART II

IPCoreL. Phillip Duane Douglas, Jr. 11/3/2010

Mentor Graphics Predefined Packages

Computer Programming in MATLAB

2. Basic Elements of Fortran

Java Notes. 10th ICSE. Saravanan Ganesh

What is MATLAB and howtostart it up?

Java Primer 1: Types, Classes and Operators

LESSON 5 FUNDAMENTAL DATA TYPES. char short int long unsigned char unsigned short unsigned unsigned long

SMPL - A Simplified Modeling Language for Mathematical Programming

C for Engineers and Scientists

Dr Richard Greenaway

Overview (4) CPE 101 mod/reusing slides from a UW course. Assignment Statement: Review. Why Study Expressions? D-1

CS-201 Introduction to Programming with Java

Program Structure and Format

There are four numeric types: 1. Integers, represented as a 32 bit (or longer) quantity. Digits sequences (possibly) signed are integer literals:

Constraint-based Metabolic Reconstructions & Analysis H. Scott Hinton. Matlab Tutorial. Lesson: Matlab Tutorial

Sketchpad Graphics Language Reference Manual. Zhongyu Wang, zw2259 Yichen Liu, yl2904 Yan Peng, yp2321

Chapter 2. MATLAB Basis

Computer Programming

C Language Part 1 Digital Computer Concept and Practice Copyright 2012 by Jaejin Lee

Introduction to C Language

FRAC: Language Reference Manual

1 Lexical Considerations

c) Comments do not cause any machine language object code to be generated. d) Lengthy comments can cause poor execution-time performance.

The Fortran Basics. Handout Two February 10, 2006

Outline. Data and Operations. Data Types. Integral Types

Chapter 2 (Part 2) MATLAB Basics. dr.dcd.h CS 101 /SJC 5th Edition 1

ELEMENTARY MATLAB PROGRAMMING

JME Language Reference Manual

egrapher Language Reference Manual

COS 140: Foundations of Computer Science

CSCE 110 PROGRAMMING FUNDAMENTALS

BoredGames Language Reference Manual A Language for Board Games. Brandon Kessler (bpk2107) and Kristen Wise (kew2132)

Chapter 3. Fortran Statements

C++ PROGRAMMING. For Industrial And Electrical Engineering Instructor: Ruba A. Salamh

Objectives. In this chapter, you will:

Introduction to Matlab. By: Dr. Maher O. EL-Ghossain

Evolution of Fortran. Presented by: Tauqeer Ahmad. Seminar on Languages for Scientific Computing

MATLAB Constants, Variables & Expression. 9/12/2015 By: Nafees Ahmed

Review More Arrays Modules Final Review

Chapter 7: Programming in MATLAB

On a 64-bit CPU. Size/Range vary by CPU model and Word size.

9. Elementary Algebraic and Transcendental Scalar Functions

C Programming Multiple. Choice

Reserved Words and Identifiers

Fundamental Data Types. CSE 130: Introduction to Programming in C Stony Brook University

Welcome. Modern Fortran (F77 to F90 and beyond) Virtual tutorial starts at BST

VLC : Language Reference Manual

Transcription:

Fortran 2003 Part 1 École normale supérieure L3 geosciences 2018/2019 Lionel GUEZ guez@lmd.ens.fr Laboratoire de météorologie dynamique Office E324 Modification date: Apr 1, 2019

Contents (1/2) Introduction ABC Types, data objects, declarations Assingment, expressions Input and output Selection control structure Iteration control structure Arrays 2/93

Contents (2/2) Intrinsic functions 3/93

Introduction

Introduction Fortran : Formula translator One of the oldest among still used programming languages. Created by IBM in 1954. Intended use: scientific computation. 5/93

History (1/3) 1954 : Fortran, first definition of the language, by IBM 1957 : Fortran II 1958 : Fortran III, not published 6/93

Historique (2/3) 1962 : Fortran IV Standardization in 1966 by a public american organization: ANSI (American National Standards Institute). The standard version becomes known as «Fortran 66». 1978 : Fortran 77 Standardization of Fortran becomes international: ISO (International Standards Organization). 7/93

History (3/3) 1991 : Fortran 90 (major revision) 1997 : Fortran 95 (minor revision) 2004 : Fortran 2003 (major revision) 2010 : Fortran 2008 (minor revision) 2018 : Fortran 2018 8/93

The compilers Some free compilers: GNU Fortran, Intel Fortran (for non-commercial use). Some commercial compilers: IBM XL Fortran, NAG, PGI, Cray 9/93

Implementation of Fortran standards by compilers (1/3) First compiler for Fortran I (1954) in 1957 10/93

Implementation of Fortran standards by compilers (2/3) We had to wait a long time for complete implementation of the Fortran 2003 standard: IBM XL Fortran compiler since version 13.1, released in 2010 Cray compiler since 2010 Portland Group (PGI) compiler since version 13.7 in 2013 Intel Fortran compiler since version 16.0, released in 2015 NAG Fortran compiler since version 6.2, released in 2018 11/93

Implementation of Fortran standards by compilers (3/3) The implementation of the Fortran 2003 standard by the GNU Fortran compiler is not complete even now (last release of the GNU Fortran compiler: version 8.2, in 2018), although not far from it. (Use at least version 4.9 from 2014). Complete implementation of thefortran 2008 standard by two compilers only: Cray and Intel. 12/93

Consequences of history (1/3) The standardization process implies stability, slow evolution of the language. (Note that not all programming languages are standardized. For example: Python, Perl ) 13/93

Consequences of history (2/3) There has been a large build-up of programs and libraries of procedures in Fortran since its birth. This work must not be wasted. This old code must remain functional. Archaic features in the language must remain valid. Successive Fortran standards add a lot to the language and remove very little. 14/93

Consequences of history (3/3) The Fortran language becomes larger and larger. There are several valid (standardconforming) ways to code the same algorithm. The choice between those different programming styles should be made based on conciseness, safety (little room left for bugs), clarity, efficiency (speed of execution). Good news: based on these criteria, new programming styles (from most recent Fortran standards) are the best. 15/93

This course Fortran 2003 A selection, not a complete description of the language. Selection of the most useful features Selection of a programming style 16/93

Bibliography (1/2) (From more specialized to more general, from tutorial to reference book.) Chirila et al. Introduction to Modern Fortran for the Earth System Sciences Springer, 2015 Hanson et Hopkins Numerical Computing with Modern Fortran Siam, 2013 17/93

Bibliography (2/2) Adams et al. The Fortran 2003 Handbook The Complete Syntax, Features and Procedures Publisher: Springer Date: 2009 Freely available reference document: draft Fortran standard 2003 18/93

ABC 19/93

ABC (1/5) Identifiers (names of variables, main program unit, procedures, etc.) : 1 to 63 characters, ABC...Z or abc...z, 0 1 9, underscore _, beginning with a letter. For example: pressure, p_surface, t0 but not: température 2nd_level 20/93

ABC (2/5) Nota bene: unlike other languages, Fortran does not distinguish lower and upper case. x and X, for example, refer to the same variable. Some special characters play a role in Fortran: blank = + - * / () [ ],. ' :! % & ; < > 21/93

ABC (3/5) Other special characters have no meaning in Fortran: ~ \ { }? ` ^ $ # @ So you can only find them in character strings or comments. 22/93

ABC (4/5) You should be careful not to use keywords and and predefined identifiers of the language for your own identifiers. Cf. list of Fortran keywords et list of intrinsic procedures ( 13.7) (many intrinsic procedures, > 100). 132 characters at most per line. You can write a statement on several lines: type an ampersand & at the end of a line to be continued. 23/93

ABC (5/5) Comments start after the exclamation mark! Alone on one line or at the end of a line, after a statement. 24/93

Notation In this document, curly brackets { } delimit an optional part. They are not part of the language, do not write the curly brackets in your program! 25/93

A basic whole program program name {declarations} executable constructs end program name You can stop in the middle of a program with the following statement: stop 1 26/93

Types, data objects, declarations 27/93

Types types intrinsic types numeric types logical character integer real 28/93

The implicit none statement Default implicit typing depending on the first letter of the identifier. Advice: deactivate it in all your programs with the following statement: implicit none This statement must be before all the declarations. program name implicit none {declarations} executable constructs end program name 29/93

Declaration of variables Write a line with a type followed by a list of variables. Examples : integer i, j real x real u, v! speed 30/93

Numerical operations The relational operators on integer and real numbers are: <, <=, == for test of equality, /= means different than, >=, > The result is a logical value. Example: x = i == 3 The numeric operators are: + - * / ** for the exponentiation 31/93

Integer type (1/3) Integer literal constants: without a decimal point Example of declaration of a variable: integer i Largest integer value: huge(0) (depends on the compiler, but usually 2 31 ) 32/93

Integer type (2/3) NB: / with integer operands gives an integer result (the floor of the ratio). Examples : 1 / 2 equals 0 5 / 2 equals 2 33/93

Integer type (3/3) Some intrinsic functions that you can apply to integers: abs(a) absolute value mod(a, p) : a modulo p That is: a (a / p) * p 34/93

Real type (1/2) Real literal constants: With exponent : -8.4 Without exponent : 1e4, 64.2e-5 Example of declaration of a variable: real x 35/93

Real type (2/2) Smallest non-null positive real value: tiny(0.) (usually # 10-38 ) Largest real value: huge(0.) (usually # 10 38 ) Smallest ε such that 1. + ε > 1.: epsilon(0.) (usually # 10-7 ) (these three properties depend on the compiler) 36/93

Character type (1/2) Write character literal constants between single of double quotes. Examples: '*' 'A' '9' "x =?" "Isn't valid" 'Created file "plouf.txt".' 37/93

Character type (2/2) Length of a string: number of characters. Examples of declaration of variables: character(len=5) a character b (default length is 1) Concatenation operator: // 38/93

Logical type Logical literal constants:.false..true. Example of declaration of variable: logical found Logical operators:.not..or..and..eqv..neqv. 39/93

Nota bene Logical and integer types are different. You cannot write an integer value in lieu of a logical one (unlike in other languages, such as C or Python). 40/93

Declaration of a named constant (1/2) Adding the parameter attribute to the declaration of an object means the object is a named constant and not a variable. You have to provide the value of the named constant in its declaration statement. 41/93

Declaration of a named constant (2/2) Examples : real, parameter:: pi = 3.14159265 integer, parameter:: m = 5, n = 10 Nota bene : the coma before parameter and the double colon :: are compulsory. 42/93

Assignment, expressions 43/93

Assignment (1/2) receiving variable = expression Example : n = n + 1 The variable and the expression must be both of numerical type, or both logical, or both of character type. 44/93

Assignment (2/2) There are precedence rules between operators (numeric first, then relational, then logical, / and * before + and -, etc.). Use parentheses if necessary. Examples : a / b / c is the same as: a / (b * c) x > y.or. i == k.and. j == l is the same as: x > y.or. (i == k.and. j == l) 45/93

Conversion between numeric types (1/2) Implicit conversion when assigning a value. Examples : integer i real r i = -1.9! receives -1 (truncation, not rounding) r = 2! receives 2. 46/93

Conversion between numeric types (2/2) For explicit conversion, use the functions floor and real. Examples : floor(a) real(i) Automatic conversion to real type during evaluation of an expression. Example : 1. / 2 47/93

Reminder on integer division The integral part of the ratio of two integer numbers is written in Fortran directly with the / operator, without need for conversion, without calling floor nor real. Example : integer i, j Mathematical notation: E ( i+ j 2 ) In Fortran, if i + j is positive, write simply: (i + j) / 2 48/93

Substring and assignment to character string (1/2) Substring: v(d:f) v(d:) v(:f) The position of the first character is 1 (and not 0, unlike in Python). Examples : character(len=8) mot mot = "aversion" mot(2:5) equals "vers" mot(6:6) equals "i" mot(2:1) equals "" 49/93

Substring and assignment to character string (2/2) Assignment : the expression if truncated or padded on the right side with blanks, if necessary. Note: in Fortran, you can modify part of a character variable. Example : mot = "aversion" mot(3:) = "ion" mot equals "avion " (unlike in Python, there is no such thing as an immutable type in Fortran) 50/93

Input and output 51/93

Printing to screen print *, list of expressions print * without a list to skip a line 52/93

Reading from the keyboard read *, list of variables Values read are interpreted automatically according to the type of the corresponding variable (so you do not write code to convert from character type, as in Python). If the variable is of type character, there is usually no need to delimit the corresponding input values with quotes. You can type input values on several lines. 53/93

Selection control structure 54/93

The if construct (1/2) if (logical expression 1) then block 1 {else if (logical expression 2) then block 2 else if (logical expression n) then block n} {else block n + 1} end if 55/93

The if construct (2/2) One block at most is executed. Note the compulsory parentheses around each logical expression. 56/93

Iteration control structure 57/93

The «do» loop (1/2) do variable = expr1, expr2{, expr3} block end do The variable must be of integer type and it is forbidden to modify it inside the loop. The 3 expressions must be of integer type. expr1 is the initial value. expr2 is the limiting value. expr3 is the increment (must be 0 if present). 58/93

The «do» loop (2/2) The 3 expressions are evaluated only once, when the do construct is encountered. The default value of the increment is 1. The number of iterations can be 0 (this does not produce a run-time error). For example if expr2 < expr1 and increment is 1. 59/93

The «do while» construct do while (condition) block end do Note that the parentheses delimiting the condition are compulsory. 60/93

Arrays 61/93

Definitions (1/3) rank 0 rank 1 rank 2 scalar vector rank 3 rank 7 arrays 62/93

Definitions (2/3) size (or extent) dimension 1: m size dimension 2: n size dimension 3: p array a(m, n, p) total size: m n p vector shape of a : m n p length of shape = rank of a 63/93

Definitions (3/3) Note: an array may have a null size, it is no problem (if a null-size array appears in an expression, no operation is done). 64/93

Declaration of a constant explicitshape array (1/2) Constant explicit-shape: the (lower bounds and) extents are known at compile-time. Example : real a(10), b(10), c(10) The default lower bound is 1. But you can choose another lower bound. Example : real x(-2:3, 5) 65/93

Declaration of a constant explicitshape array (2/2) You can use named constants for the extents. Example : integer, parameter:: m = 10, n = 5 real a(m,n) 66/93

Array constructor [list of scalar expressions] All the expressions must have the same type. Examples : real v(3) v = [3.2, 4., 6.51] character(len=3), parameter:: & currency(3) = ["EUR", "FRA", "USD"] 67/93

Selection of an array element Through a list of subscripts. Number of subscripts: rank of the array. Each subscript must be an integer expression. Example : t3(i * j, 1, k / i + 2) 68/93

Array section Choose an arithmetic progression for one or more dimensions. a:b:r a : first subscript, defaults to lower bound b : limiting subscript, defaults to upper bound r : stride, defaults to 1, may be < 0 Examples : t1(m:n), t1(m + n:n:-1) mat(i, :), mat(:i, j:) 69/93

Array expression (1/2) All the intrinsic operators (arithmetic, logical, relational, character) apply to array operands. Array operands must be conformable: they must have the same shape. A scalar and an array are also considered as conformable. The result is an array with the same shape as the operands. 70/93

Array expression (2/2) Examples : Scalar and array: mat / 2 Several arrays: mat(:, 0) * t3(:, 1, 1) real a(5), b(5) a == b: logical array 71/93

Array assignment You can assign an array expression to a conformable array. Examples : a = a(10:1:-1) mat = 0 a(::2) = 0. 72/93

Reading or printing an array In a read or print statement, you can use not only array elements but also whole arrays (or array sections). Examples : integer a(10, 2, 3), b(8) Not only: read *, a(3, 2, 1) print *, a(4, 1, 2) but also possible: read *, b print *, a(5:, :, 2) 73/93

Array element order (1/2) Reading or printing an array is done in array element order. Order: the subscripts along the first dimension vary most rapidly. Exemple : real a(2, 2) a(1, 1), a(2, 1), a(1, 2), a(2, 2) 74/93

Array element order (2/2) Nota bene : array element order normally corresponds to storage order. So, if you need to loop over the elements of an array, do it in array element order. Example, which programming is more efficient? do j = 1, n do i = 1, m do i = 1, m do j = 1, n a(i,j)=i+j a(i,j)=i+j end do end do end do end do 75/93

Example of printing an array integer a(10, 2, 3) print *, a(5:, :, :) prints: a(5, 1, 1), a(6, 1, 1),, a(10, 1, 1), a(5, 2, 1), on as many lines as necessary (newlines may be inserted, depending on the compiler). 76/93

Reading an array read *, array When the program runs, the user can enter elements in the terminal, separated by commas, space or newlines. 77/93

Allocatable arrays (1/2) When you do not know the extents at compiletime. Declare only the rank of the array, using a colon character : for each dimension Add the attribute allocatable real, allocatable:: a(:), b(:, :) 78/93

Allocatable arrays (2/2) Set the shape of the array: Implicitly by assigning an array expression: a = [3, 5, 1] Or explicitly with an allocate statement: allocate(a(n:m), b(p, q)) This is useful if, afterwards, you are not going to define the whole array in a single statement. 79/93

The thing to remember about arrays Fortran allows you to use not only array elements but also whole arrays or array sections in expressions, assignments, input and ouput statements. You improve concision and clarity by using this feature instead of programming loops on array elements.

Intrinsic functions

Intrinsic functions Many of them Useful: for concision, clarity, speed Difficulty: to guess there is an intrinsic function for what you want to compute Advice: skim the list of intrinsic functions 82/93

Elemental intrinsic functions An elemental function can take either a scalar or an array argument. The function correspondingly returns a scalar or an array with the same shape. If the argument is an array, then the operation is applied to each element of the array. Example : sin(x), sin([x, 2*x, 3*x]) 83/93

Elemental intrinsic functions for type conversion int, floor, ceiling, nint, real, etc. 84/93

Elemental intrinsic functions without type conversion abs (of an integer or real number) mod, modulo max, min Example : a equals [1, 2, 0, 0] b equals [2, 1, 2, 3] c equals [3, 1, 0, 4] max(a, b, c) equals [3, 2, 2, 4] sign 85/93

Mathematical elemental intrinsic functions acos, asin, atan, cos, sin, tan atan2 atan2(x, y) : returns the argument in ]-π, π] of x+iy sqrt, log, log10, exp, cosh, sinh, tanh 86/93

The elemental intrinsic function merge To merge two arrays. merge(tsource, fsource, mask) returns tsource where mask is true and fsource elsewhere tsource and fsource must have the same type and be conformable. mask : logical, conformable with tsource and fsource 87/93

Example use of merge T = merge(land_t, sst, land_mask) sst 0 x x x x x x x x 0 0 x x x x land_t x x x x x x x x x x x x 88/93

Array reduction intrinsic functions (1/2) Basic use case: a reduction function applies some operation to a whole array and returns a single scalar («reduction» : from array to scalar) On a numerical array: sum, product, minval, maxval On a logical array: any (logical or), all (logical and), count (number of true values) 89/93

Array reduction intrinsic functions (2/2) m=[ 1 3 5 6] 2 4 m2=[ 0 3 5 8] 7 4 Examples : any(m==m2) returns.true. all(m==m2) returns.false. count(m==m2) returns 3 sum(m) returns 21 90/93

Dot product dot_product(vector_a, vector_b) On vectors of the same size. Equivalent to: sum(vector_a * vector_b) Better to use dot_product, clearer and possibly faster. 91/93

Matrix product and transpose matmul(matrix_a, matrix_b) 2 arrays of rank 2 or 1 array of rank 2 and 1 vector The first subscript for a rank 2 array is here assumed to be the row subscript. Constraint on extents so that the matrix product is well defined. transpose(matrix) On a rank-2 array of any type. 92/93

Location of an extremum minloc(array{, mask}) maxloc(array{, mask}) Result: vector of subscripts of the first extremum found Examples : V: [7, 6, 9, 6] :[ 8 3 0 5 ] A 3 4 1 2 1 5 6 4 minloc(v) returns [2] minloc(a, mask=a>-4) returns [1, 2] 93/93