fortran 2003 part 1 - sorbonne-universitelguez/teaching/fortran_1.pdf · fortran 2003 part 1 École...
TRANSCRIPT
![Page 1: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/1.jpg)
Fortran 2003Part 1
École normale supérieureL3 geosciences
2019/2020
Lionel [email protected]
Laboratoire de météorologie dynamiqueOffice E212
Modification date: Apr 15, 2020
![Page 2: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/2.jpg)
2/94
Contents (1/2)
● Introduction● ABC● Types, data objects, declarations● Assignment, expressions● Input and output● Selection control structure● Iteration control structure● Arrays
![Page 3: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/3.jpg)
3/94
Contents (2/2)
● Standard intrinsic functions
![Page 4: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/4.jpg)
Introduction
![Page 5: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/5.jpg)
5/94
Introduction
● Fortran: Formula translator● One of the oldest among still used
programming languages. Created by IBM in 1954.
● Intended use: scientific computation.
![Page 6: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/6.jpg)
6/94
The future of 1954
![Page 7: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/7.jpg)
7/94
History (1/3)
● 1954: Fortran, first definition of the language, by IBM
● 1957: Fortran II● 1958: Fortran III, not published
![Page 8: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/8.jpg)
8/94
History (2/3)
● 1961: 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 77Standardization of Fortran becomes international: ISO (International Standards Organization).
![Page 9: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/9.jpg)
9/94
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 (minor revision)
![Page 10: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/10.jpg)
10/94
The compilers
● Some free compilers: GNU Fortran, Intel Fortran (for non-commercial use).
● Some commercial compilers: IBM XL Fortran, NAG, PGI, Cray…
![Page 11: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/11.jpg)
11/94
Implementation of Fortran standards by compilers
● Takes years● First compiler for Fortran I (1954) in 1957● Complete implementation of the Fortran 2008
standard by two compilers only: Cray and Intel.
![Page 12: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/12.jpg)
12/94
Implementation of Fortran 2003 standard by compilers (1/2)
● 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
![Page 13: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/13.jpg)
13/94
Implementation of Fortran 2003 standard by compilers (2/2)
● NAG Fortran compiler since version 6.2, released in 2018
● GNU Fortran compiler since version 9.1, released in 2019
![Page 14: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/14.jpg)
14/94
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…)
![Page 15: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/15.jpg)
15/94
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.
![Page 16: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/16.jpg)
16/94
Consequences of history (3/3)
● The Fortran language becomes larger and larger. There are several valid (standard-conforming) 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.
![Page 17: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/17.jpg)
17/94
This course
● Fortran 2003● A selection, not a complete description of the
language.● Selection of the most useful features● Selection of a programming style
![Page 18: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/18.jpg)
18/94
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 SciencesSpringer, 2015
● Hanson et HopkinsNumerical Computing with Modern FortranSiam, 2013
![Page 19: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/19.jpg)
19/94
Bibliography (2/2)
● Adams et al.The Fortran 2003 Handbook – The Complete Syntax, Features and ProceduresPublisher: SpringerDate: 2009
● Freely available reference document: draft Fortran standard 2003
![Page 20: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/20.jpg)
20/94
ABC
![Page 21: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/21.jpg)
21/94
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, t0but not:température2nd_level
![Page 22: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/22.jpg)
22/94
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 = + - * / () [ ] , . ' : ! “ % & ; < >
![Page 23: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/23.jpg)
23/94
ABC (3/5)
● Other special characters have no meaning in Fortran:~ \ { } ? ` ^ | $ # @So you can only find them in character strings or comments.
![Page 24: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/24.jpg)
24/94
ABC (4/5)
● You should be careful not to use keywords or predefined identifiers of the language for your own identifiers. Cf. list of Fortran keywords and list of intrinsic procedures (§§ 13.7) (126 intrinsic procedures).
● 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.
![Page 25: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/25.jpg)
25/94
ABC (5/5)
● Comments start after the exclamation mark !Alone on one line or at the end of a line, after a statement.
![Page 26: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/26.jpg)
26/94
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!
![Page 27: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/27.jpg)
27/94
A basic whole program
● program name {declarations} executable constructsend program name
● You can stop in the middle of a program with the following statement:stop 1
![Page 28: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/28.jpg)
28/94
Types, data objects, declarations
![Page 29: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/29.jpg)
29/94
Types
types
intrinsic types …
numeric types characterlogical
integer real …
![Page 30: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/30.jpg)
30/94
God is real… unless explicitly declared an integer.
● Default implicit typing depending on the first letter of the identifier. Advice: deactivate it in all your programs with the following statement:implicit noneThis statement must be before all the declarations.
● program name implicit none {declarations} executable constructsend program name
![Page 31: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/31.jpg)
31/94
Declaration of variables
● Write a line with a type followed by a list of variables.
● Examples :integer i, jreal xreal u, v ! speed
![Page 32: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/32.jpg)
32/94
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
![Page 33: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/33.jpg)
33/94
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 231)
![Page 34: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/34.jpg)
34/94
Integer type (2/3)
● NB: / with integer operands gives an integer result (the floor of the ratio).Examples :1 / 2 equals 05 / 2 equals 2
![Page 35: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/35.jpg)
35/94
Integer type (3/3)
● Some intrinsic functions that you can apply to integers: ● abs(a) absolute value
● mod(a, p) : a modulo pThat is: a – (a / p) * p
![Page 36: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/36.jpg)
36/94
Real type (1/2)
● Real literal constants:Without exponent : -8.4With exponent : 1e4, 64.2e-5
● Example of declaration of a variable:real x
![Page 37: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/37.jpg)
37/94
Real type (2/2)
● Smallest non-null positive real value: tiny(0.) (usually # 10-38)Largest real value:huge(0.) (usually # 1038)Smallest ε such that 1. + ε > 1.:epsilon(0.) (usually # 10-7)(these three properties depend on the compiler)
![Page 38: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/38.jpg)
38/94
Character type (1/2)
● Write character literal constants between single of double quotes. Examples:'*' 'A' '9' "x = ?""Isn't valid"'Created file "plouf.txt".'
![Page 39: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/39.jpg)
39/94
Character type (2/2)
● Length of a string: number of characters.Examples of declaration of variables:character(len=5) acharacter b(default length is 1)
● Concatenation operator: //
![Page 40: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/40.jpg)
40/94
Logical type
● Logical literal constants:.false. .true.
● Example of declaration of variable:logical found
● Logical operators:.not. .or. .and. .eqv. .neqv.
![Page 41: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/41.jpg)
41/94
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).
![Page 42: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/42.jpg)
42/94
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.
![Page 43: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/43.jpg)
43/94
Declaration of a named constant (2/2)
● Examples :
real, parameter:: pi = 3.14159265integer, parameter:: m = 5, n = 10
● Nota bene : the coma before parameter and the double colon “ :: ” are compulsory.
![Page 44: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/44.jpg)
44/94
Assignment, expressions
![Page 45: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/45.jpg)
45/94
Assignment (1/2)
● receiving variable = expressionExample : n = n + 1
● The variable and the expression must be both of numerical type, or both logical, or both of character type.
![Page 46: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/46.jpg)
46/94
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 == lis the same as:x > y .or. (i == k .and. j == l)(.and. has precedence over .or.)
![Page 47: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/47.jpg)
47/94
Conversion between numeric types (1/2)
● Implicit conversion when assigning a value.Examples :integer ireal ri = -1.9 ! receives -1 (truncation, not rounding)r = 2 ! receives 2.
![Page 48: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/48.jpg)
48/94
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
![Page 49: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/49.jpg)
49/94
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, jMathematical notation:
In Fortran, if i + j is positive, write simply:(i + j) / 2
⌊ i+ j2 ⌋
![Page 50: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/50.jpg)
50/94
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) motmot = "aversion"mot(2:5) equals "vers"mot(6:6) equals "i"mot(2:1) equals ""
![Page 51: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/51.jpg)
51/94
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)
![Page 52: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/52.jpg)
52/94
Input and output
![Page 53: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/53.jpg)
53/94
Printing to screen
● print *, list of expressions
● print *without a list to skip a line
![Page 54: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/54.jpg)
54/94
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.
![Page 55: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/55.jpg)
55/94
Selection control structure
![Page 56: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/56.jpg)
56/94
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
![Page 57: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/57.jpg)
57/94
The if construct (2/2)
● One block at most is executed.● Note the compulsory parentheses around each
logical expression.
![Page 58: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/58.jpg)
58/94
Iteration control structure
![Page 59: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/59.jpg)
59/94
The « do » loop (1/2)
● do variable = expr1, expr2{, expr3} blockend 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).
![Page 60: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/60.jpg)
60/94
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.
![Page 61: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/61.jpg)
61/94
The « do while » construct
● do while (condition) blockend do
● Note that the parentheses delimiting the condition are compulsory.
![Page 62: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/62.jpg)
62/94
Arrays
![Page 63: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/63.jpg)
63/94
Definitions (1/3)
rank 0
scalar
rank 1
vector
rank 2
rank 3
… rank 7
arrays
![Page 64: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/64.jpg)
64/94
Definitions (2/3)
size dimension 2:n
size
(or
ext
ent)
dim
ensi
on 1
: m
size dimension 3:
p
array a(m, n, p)total size: m ´ n ´ p
shape of “a”: m n plength of shape = rank of “a”
vector
![Page 65: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/65.jpg)
65/94
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).
![Page 66: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/66.jpg)
66/94
Declaration of a constant explicit-shape 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)
![Page 67: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/67.jpg)
67/94
Declaration of a constant explicit-shape array (2/2)
● You can use named constants for the extents. Example :integer, parameter:: m = 10, n = 5real a(m,n)
![Page 68: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/68.jpg)
68/94
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"]
![Page 69: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/69.jpg)
69/94
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)
![Page 70: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/70.jpg)
70/94
Array section
● Choose an arithmetic progression for one or more dimensions.a:b:ra : first subscript, defaults to lower boundb : limiting subscript, defaults to upper boundr : stride, defaults to 1, may be < 0
● Examples :t1(m:n), t1(m + n:n:-1)mat(i, :), mat(:i, j:)
![Page 71: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/71.jpg)
71/94
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.
![Page 72: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/72.jpg)
72/94
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
![Page 73: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/73.jpg)
73/94
Array assignment
● You can assign an array expression to a conformable array.
● Examples :a = a(10:1:-1)mat = 0a(::2) = 0.
![Page 74: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/74.jpg)
74/94
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 *, bprint *, a(5:, :, 2)
![Page 75: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/75.jpg)
75/94
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)
![Page 76: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/76.jpg)
76/94
Array element order (2/2)
do j = 1, n do i = 1, m a(i,j)=i+j end doend do
● 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 i = 1, m do j = 1, n a(i,j)=i+j end doend do
![Page 77: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/77.jpg)
77/94
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).
![Page 78: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/78.jpg)
78/94
Reading an array
read *, arrayWhen the program runs, the user can enter elements in the terminal, separated by commas, space or newlines.
![Page 79: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/79.jpg)
79/94
Allocatable arrays (1/2)
● When you do not know the extents at compile-time.
● Declare only the rank of the array, using a colon character : for each dimension
● Add the attribute allocatablereal, allocatable:: a(:), b(:, :)
![Page 80: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/80.jpg)
80/94
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.
![Page 81: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/81.jpg)
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.
![Page 82: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/82.jpg)
Standard intrinsic functions
![Page 83: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/83.jpg)
83/94
Standard 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. Cf. §
13.5, physical pages 310 to 314, in the Fortran standard. Detailed descriptions are in § 13.7, physical page 316.
![Page 84: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/84.jpg)
84/94
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])
![Page 85: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/85.jpg)
85/94
Intrinsic functions for type conversion
● int, floor, ceiling, nint, real, etc.
● All of them are elemental.
![Page 86: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/86.jpg)
86/94
Elemental functions for numeric computation (1/2)
● abs(of an integer or real number)
● mod, modulo
● max, minExample :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
![Page 87: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/87.jpg)
87/94
Elemental functions for numeric computation (2/2)
● acos, asin, atan, cos, sin, tan
● atan2atan2(x, y) : returns the argument in ]-π, π] of x+iy
● sqrt, log, log10, exp, cosh, sinh, tanh
Etc.
![Page 88: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/88.jpg)
88/94
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
![Page 89: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/89.jpg)
89/94
Example use of merge
T = merge(land_T, sst, land_mask)
x xx xxx x x
0
0
x x x x
0
x xx xxx x x
x x x x
sst land_T
![Page 90: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/90.jpg)
90/94
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)
![Page 91: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/91.jpg)
91/94
Array reduction intrinsic functions (2/2)● Examples :
any(m==m2) returns .true.all(m==m2) returns .false.count(m==m2) returns 3
sum(m) returns 21
m2=[0 3 57 4 8 ]
m=[1 3 52 4 6 ]
![Page 92: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/92.jpg)
92/94
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.
![Page 93: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/93.jpg)
93/94
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.
![Page 94: Fortran 2003 Part 1 - sorbonne-universitelguez/Teaching/Fortran_1.pdf · Fortran 2003 Part 1 École normale supérieure L3 geosciences 2019/2020 Lionel GUEZ ... Introduction to Modern](https://reader033.vdocuments.us/reader033/viewer/2022053010/5f0dbd227e708231d43bd7d8/html5/thumbnails/94.jpg)
94/94
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]
minloc(V) returns [2]minloc(A, mask=A>-4) returns [1, 2]
A :[8 −3 0 −53 4 −1 21 5 6 4 ]