3. FORTRAN : FORmula TRANslator
Traducteur de formules
• Langage scientifique par excellence
• Nombreuses bibliothèques de fonctions
• Rapidité ← compilateurs
SMP Module: ANP J. EL KHAMKHAMI
4. Apparition : les années 50
1966 : 1ère norme Fortran 66
1977 : 2ème norme Fortran 77
Les années 90 : Fortran 90, Fortran 95
SMP Module: ANP J. EL KHAMKHAMI
6. 2.1. Jeu de caractères
• Les caractères alphanumériques
• Les 26 lettres,
• Les 10 chiffres,
• Le souligneur _
• Les 20 caractères spéciaux
• Le caractère blanc (espace)
7. Caractères Noms Caractères Noms
= Signe égal ' Apostrophe
+ Signe plus : Deux-points
- Signe moins ! Point d’exclamation
* Astérisque ' ' guillemet
/ Barre oblique % Pour-cent
( Parenthèse & Esperluette
ouvrante
) Parenthèse ; Point-virgule
fermante
, Virgule < Plus petit que
. Point > Plus grand que
§ dollar ? Point d’interrogation
8. 2.2. Identificateurs
• Noms des différents objets manipulables
par le programme :
Objets : Types, variables, fonctions, …
• suite de caractères alphanumériques
(31 caractères)
• 1er caractère ≠ chiffre
• 1er caractère ≠ souligneur _
SMP Module: ANP J. EL KHAMKHAMI
10. 2.3. Séparateurs
Deux identificateurs successifs doivent impérativement
être séparés soit par un espace soit par un
changement de ligne
Exception :
– certains mots clés composés (Endif)
– si la syntaxe impose un séparateur tel que : +, -,
=,…
SMP Module: ANP J. EL KHAMKHAMI
11. 2.4. Mots clés
Identificateurs prédéfinis par le langage
Exemples :
program, print, integer, real,
dimension, goto, module, do while, if, ...
SMP Module: ANP J. EL KHAMKHAMI
12. 2.5. Etiquette
• 1< nombre entier < 99999
• utilité : référencer certaines instructions
Fortran (boucle, branchement, déclaration
format)
• Exemples : 02, 145, 85792, ...
SMP Module: ANP J. EL KHAMKHAMI
13. 3. Formats du code source
SMP Module: ANP J. EL KHAMKHAMI
14. •Format fixe :
Façon ancienne : Fortran 77 (avec 2 extensions)
Les fichiers au format libre porteront
l'extension .f ou .for
•Format libre :
Façon nouvelle
Les fichiers au format libre porteront
l'extension .f90
15. Format libre
Les colonnes 1 à 6 ne sont plus réservées. Les étiquettes peuvent
être placées à partir de n'importe quelle colonne.
Les instructions d’un programme sont écrites sur des lignes d’au
plus 132 caractères.
Il est possible d’écrire plusieurs instructions sur une même ligne,
mais en les séparant par un point virgule (i=1 ; x=2.3 ; y=.0).
Une instruction peut être écrite sur plusieurs lignes. Une ligne
se terminant par le caractère "&" indique que la ligne suivante
est une ligne de continuation, exemple :
print * ‘ nom _ prenom :’, id, &
‘ date de naissance :’, nd, &
‘ lieu de naissance :’ ,ville
16. • Lors de la coupure d’une chaîne de caractères la suite de la
chaîne doit impérativement commencer par le caractère "&",
Exemple :
print *, 'Ceci est une phrase &
& sur deux lignes'
• Un commentaire peut être indiqué n'importe où sur une ligne à
condition qu'il soit précédé du caractère "!",
Exemple :
if(xfin< xdeb) then ! si la condition est remplie
print *,‘ erreur : réesayer ‘ ! écriture à l’écran
endif ! fin de la condition
17. Les blancs sont significatifs :
– des blancs ne doivent jamais être insérés à
l’intérieur d’une unité lexicale : inte ger
(invalide), integer (valide)
– un (ou plusieurs) blanc doivent séparer des unités
lexicales majeures successives : do20j=1,nmax
(invalide), do 20 j=1,nmax (valide)
18. – Des blancs peuvent séparer des unités lexicales
(majeures ou mineures) de façon à améliorer la
lisibilité : (1+cos(x))+(x+y) ou (1+cos(x)) + (x+y)
– Un blanc (au moins) doit séparer certains mots-
clés composés (do while, implicit none,
recursive function, type function, etc), dans
d’autres, il est facultatif (end if, go to, select
case, etc)
20. • Un programme Fortran est composé de parties
indépendantes (unités de programme)
Elles :
• peuvent être compilées séparément
• admettent chacune son propre environnement
• Une unité de programme peut être :
• le programme principal
• un sous-programme principal (subroutine ou function)
• un module
SMP Module: ANP J. EL KHAMKHAMI
21. Module (Use)
Procédure de module
Subroutine (Call)
Programme principal Procédures internes
(Contains)
Function
Procédures internes
(Contains)
Procédures externes
Subroutine (Call)
Procédures internes
(Contains) Procédures internes
(Contains)
Un exemple simple de programme :
Function
cliquer ici
Procédures internes
(Contains)
24. • Edition du code source :
• saisir au clavier
•sauvegarder sous un nom qui se termine par l’extension .F90
• Compilation du fichier source :
• action de transformer (à l’aide du compilateur) le code source :
création du fichier : .obj
• Édition des liens (linking)
• établir les liens entre les différentes unités du programme
création du fichier : .exe
• Lancement de l’exécutable
• exécuter le fichier: .exe SMP Module: ANP J. EL KHAMKHAMI
25. Programme principal
Syntaxe générale :
PROGRAM [nom-programme] L’entête est facultatif
[instructions de spécification]
[instructions exécutables]
[Contains
procédures internes] éventuellement
END [PROGRAM [nom-programme]]
facultatifs
SMP Module: ANP J. EL KHAMKHAMI
26. Module
Syntaxe générale : Module_ kind
integer, parameter :: r = 8
END Module kinds
Program principal
Use_ kind
Module [nom-module] real(kind=r) :: x, y
…
END Program principal
[instructions de spécification]
[Contains
procédures modules] éventuellement
END [Module [nom-module]]
facultatifs
SMP Module: ANP J. EL KHAMKHAMI
27. Subroutine
Syntaxe générale : subroutine (rac_trin(a, b, rac
implicit none
real :: a, b, rac
if(a==0) then
Subroutine [nom-subroutine] 'print*, 'pas de solution
[instructions de spécification] else
rac = -b/a
[instructions exécutables] endif
End subroutine rac
[Contains éventuellement
procédures internes]
END [Subroutine [nom-subroutine]]
facultatifs
SMP Module: ANP J. EL KHAMKHAMI
28. Function
Syntaxe générale :
Function (F(a, b
implicit none
Function [nom-function] real :: a, b
F = a*cos((b
[instructions de spécification] End Function F
[instructions exécutables]
[Contains
éventuellement
procédures internes]
END [Function [nom-function]]
facultatifs
SMP Module: ANP J. EL KHAMKHAMI