Rappels de programmation Fortran Violaine Louvet1, très inspirée du cours de l’
Rappels de programmation Fortran Violaine Louvet1, très inspirée du cours de l’IDRIS réalisé par Anne Fouilloux et Patrick Corde 1CNRS/ICJ Rabat, 9-12/04/2012 Violaine Louvet (CNRS/ICJ) Fortran Rabat, 9-12/04/2012 1 / 105 1 Généralités 2 Déclarations & variables 3 Opérateurs et expressions 4 Structures de contrôles 5 Tableaux 6 Gestion de la mémoire 7 Types dérivés et modules 8 Procédures 9 Entrées-Sorties 10 Fonctions intrinsèques 11 Pointeurs 12 Travaux pratiques Violaine Louvet (CNRS/ICJ) Fortran Rabat, 9-12/04/2012 2 / 105 Généralités 1 Généralités Unité de programme Exécution Syntaxe Exercice 2 Déclarations & variables 3 Opérateurs et expressions 4 Structures de contrôles 5 Tableaux 6 Gestion de la mémoire 7 Types dérivés et modules 8 Procédures 9 Entrées-Sorties 10 Fonctions intrinsèques 11 Pointeurs 12 Travaux pratiques Violaine Louvet (CNRS/ICJ) Fortran Rabat, 9-12/04/2012 3 / 105 Généralités Historique Langage compilé (par opposition à interprété) Evolution : ▶1958 : Fortran II ▶1966 : Fortran IV ▶1977 : Fortran 77 ▶1994 : Norme Fortran 90 ▶1997 : Norme Fortran 95 ▶2004 : Norme Fortran 2003 ▶2010 : Norme Fortran 2008 Contenu du cours Nous verrons ici essentiellement les éléments de la norme 2003. La norme 2008 introduit notamment des notions avancées de programmation objet qui ne seront pas abordées. Violaine Louvet (CNRS/ICJ) Fortran Rabat, 9-12/04/2012 3 / 105 Généralités Unité de programme Un programme source Fortran est composé de parties indépendantes appelées unités de programme (scoping unit) : le programme principal les sous-programmes : ▶de type subroutine ▶de type function les modules les block data Organisation des unités de programme Chaque unité comprend une partie déclarative (déclaration des variables locales, ...) suivie d’une partie comportant des instructions exécutables. Idéalement, elles peuvent être dans des fichiers séparés. Violaine Louvet (CNRS/ICJ) Fortran Rabat, 9-12/04/2012 4 / 105 Généralités Exécution Compilation / Exécution Rappel : compilation/édition de liens On compile les fichiers contenant les différentes unités de programme Eventuellement, on crée une bibliothèque avec les fichiers objets générés L ’éditions de liens permet de générer l’exécutable à partir des fichiers objet ou des bibliothèques créés à la compilation Exécution Processus (en anglais, process) : programme en cours d’exécution : ▶Un ensemble d’instructions à exécuter (un programme) ▶Un espace d’adressage en mémoire vive Violaine Louvet (CNRS/ICJ) Fortran Rabat, 9-12/04/2012 5 / 105 Généralités Exécution Processus / Thread Processus Un processus a son propre espace mémoire, sa propre pile qu’il ne partage pas avec les autres les processus sont plus lourds que les threads à créer : en général, 100 fois plus rapides à créer qu’un processus les processus sont réellement indépendants Processus léger / Thread Les threads partagent le même espace mémoire les threads peuvent se partager des informations facilement les threads doivent eux-mêmes faire attention à ne pas se marcher sur les pieds : il n’y a pas de protection entre les threads d’un même processus Les threads ont peu d’informations propres Violaine Louvet (CNRS/ICJ) Fortran Rabat, 9-12/04/2012 6 / 105 Généralités Exécution Processus / Thread 2 processus 1 thread par processus 1 processus 3 threads par processus Contexte On se place ici dans le cadre d’une programmation séquentielle : un seul processus. Les prochains cours aborderont des concepts différents : Plusieurs processus Plusieurs threads voir les deux à la fois Violaine Louvet (CNRS/ICJ) Fortran Rabat, 9-12/04/2012 7 / 105 Généralités Syntaxe Eléments syntaxiques En format libre, les lignes peuvent être de longueur quelconque, maximale de 132 caractères. Depuis Fortran 90, on oublie le format fixe ! On peut coder plusieurs instructions sur la même ligne en les séparant avec « ; » On peut coder une instruction sur plusieurs lignes en utilisant le caractère de continuation « & » ▶Cas particulier de la chaîne de caractères : print *, "Discretization error & &for poisson solver : ",err Le caractère « ! » indique que ce qui suit est un commentaire Violaine Louvet (CNRS/ICJ) Fortran Rabat, 9-12/04/2012 8 / 105 Généralités Exercice Exercice PROGRAM MAIN ;INTEGER : :degreesfahrenheit& , degreescentigrade ;READ∗,& degreesfahrenheit ; degreescentigrade& =5∗( degreesfahrenheit −32)/9 ;PRINT∗,& degreesCENtiGrAde ;END Reformatter ce code correctement (de façon lisible) Compiler, exécuter Que fait-il ? Violaine Louvet (CNRS/ICJ) Fortran Rabat, 9-12/04/2012 9 / 105 Déclarations & variables 1 Généralités 2 Déclarations & variables Identificateurs Types du fortran Précision des nombres Kind Chaîne de caractères Implicit none Constantes et initialisations Exercice 3 Opérateurs et expressions 4 Structures de contrôles 5 Tableaux 6 Gestion de la mémoire 7 Types dérivés et modules 8 Procédures 9 Entrées-Sorties 10 Fonctions intrinsèques 11 Pointeurs 12 Travaux pratiques Violaine Louvet (CNRS/ICJ) Fortran Rabat, 9-12/04/2012 10 / 105 Déclarations & variables Identificateurs Identificateurs Donne un nom à : ▶une variable ▶une constante ▶une procédure Règles à suivre : ▶suite de caractères alphanumériques (lettres non accentuées, chiffres, underscore) ▶une lettre en premier caractère ▶longueur limitée à 31 caractères ▶pas de distinction majuscule/minuscule (case insensitive) Exemples Matrix matrix mesh_size nx0 Violaine Louvet (CNRS/ICJ) Fortran Rabat, 9-12/04/2012 10 / 105 Déclarations & variables Types du fortran Types du fortran Le type d’une variable détermine : le nombre d’octets à réserver en mémoire un mode de représentation interne l’ensemble des valeurs admissibles l’ensemble des opérateurs qui peuvent lui être appliqués Types prédéfinis INTEGER entier CHARACTER caractère LOGICAL deux valeurs, .TRUE. ou .FALSE. REAL réel simple précision DOUBLE PRECISION réel double précision COMPLEX complexe simple précision Violaine Louvet (CNRS/ICJ) Fortran Rabat, 9-12/04/2012 11 / 105 Déclarations & variables Précision des nombres Précision des nombres Simple précision 4 octets 7 chiffres décimaux significatifs Double précision 8 octets 15 chiffres décimaux significatifs Quadruple précision 16 octets 34 chiffres significatifs Les types prédéfinis en Fortran 90 sont en fait des noms génériques renfermant chacun un certain nombre de variantes ou sous-types que l’on peut sélectionner à l’aide du paramètre KIND lors de la déclaration des objets. Ce paramètre est un mot-clé à valeur entière. Cette valeur désigne la variante souhaitée pour un type donné. Les différentes valeurs du paramètre KIND sont dépendantes du système utilisé. Elles correspondent, en général, au nombre d’octets désirés pour coder l’objet déclaré. Violaine Louvet (CNRS/ICJ) Fortran Rabat, 9-12/04/2012 12 / 105 Déclarations & variables Précision des nombres Rappel d’arithmétique flottante Les nombres réels sont représentés de façon approximative en mémoire (représentation en virgule flottante), avec la convention standardisée de la forme m × 2e, où m est la mantisse, 1 ≤m ≤2 et e l’exposant. Certains réels sont par définition impossibles à représenter en numération classique : 1/3, π ... La représentation en un nombre fixe d’octets oblige le processeur à faire appel à des approximations afin de représenter les réels. Le degré de précision de la représentation par virgule flottante des réels est directement proportionnel au nombre de bits alloué à la mantisse, alors que le nombre de bits alloué à l’exposant conditionnera l’amplitude de l’intervalle des nombres représentables. Plusieurs propriétés de l’arithmétique (associativité, distributivité,...) ne sont plus valides en arithmétique flottante ! Violaine Louvet (CNRS/ICJ) Fortran Rabat, 9-12/04/2012 13 / 105 Déclarations & variables Kind Utilisation de KIND Exemples real ( kind =8) : : x ! reel double precision integer ( kind =2) : : i ! e n t i e r code sur 2 octets , integer normal sur 4 On peut indiquer le sous-type désiré lors de l’écriture des constantes en les suffixant (pour les constantes numériques) ou de les préfixant (pour les constantes chaînes de caractères) par la valeur du sous-type à l’aide du caractère « _ ». Exemples n = 23564_4 ! e n t i e r sur 4 octets x = 12.87976543245_8 ! reel sur 8 octets Violaine Louvet (CNRS/ICJ) Fortran Rabat, 9-12/04/2012 14 / 105 Déclarations & variables Kind Fonction KIND Renvoie la valeur entière qui correspond au sous-type de l’argument spécifié Exemples kind ( 1 . 0 ) ! valeur associee au sous−type reel simple precision kind (1.0 d0 ) ! valeur associee au sous−type reel double precision real ( kind=kind ( 1 . d0 ) ) : : x ! declare x comme reel double precision ! quelle que s o i t la machine u t i l i s e e Remarque Les types définis via cette fonction KIND sont assurés d’être portables au niveau de la compilation. Violaine Louvet (CNRS/ICJ) Fortran Rabat, 9-12/04/2012 15 / 105 Déclarations & variables Chaîne de caractères Chaîne de caractères Pour déclarer une chaîne de caractères on précise sa longueur. Si elle n’est pas indiquée elle est égale à 1. Exemples CHARACTER( len=n ) : : ch_car CHARACTER : : c Manipulation de chaînes LEN_TRIM(string) : longueur (entier) de la chaîne débarrassée de ses blancs de fin TRIM(string) : débarrasse string de ses blancs de fin LGE(string_a, string_b) : VRAI si string_a « supérieure ou = » à string_b (Lexically Greater or Equal), et les variantes LGT, LLE, LLT (on peut aussi utiliser >=, >,<=, <). ADJUSTL(string) : débarrasse string de ses blancs de tête (cadrage à gauche) et complète à droite par des blancs. Idem avec ADJUSTR à droite. Violaine Louvet (CNRS/ICJ) Fortran Rabat, 9-12/04/2012 16 / 105 Déclarations & variables Implicit none Instruction IMPLICIT NONE Par défaut, les variables uploads/Management/ fortran.pdf
Documents similaires










-
18
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Jan 20, 2022
- Catégorie Management
- Langue French
- Taille du fichier 1.2768MB