Langage Fortran (Avancé) Patrick Corde Hervé Delouis Patrick.Corde@idris.fr 26
Langage Fortran (Avancé) Patrick Corde Hervé Delouis Patrick.Corde@idris.fr 26 mars 2021 Patrick Corde Hervé Delouis ( Patrick.Corde@idris.fr ) Langage Fortran(Avancé) 26 mars 2021 1 / 328 Table des matières I 1 Introduction Historique Compatibilité norme 77/90 Apports de Fortran 90 Apports de Fortran 95 bibliographie documentation 2 Généralités Structure d’un programme Compilation, édition des liens, exécution Éléments syntaxiques Les identificateurs Le « format libre » Les commentaires Le « format fixe » Les déclarations Typage des données : paramètre KIND Typage des données : paramètre KIND (nouveautés norme 2008) 3 Procédures récursives Clauses RESULT et RECURSIVE Exemple : suite de Fibonacci 4 Types dérivés Définition et déclaration de structures Initialisation (constructeur de structure) Patrick Corde Hervé Delouis ( Patrick.Corde@idris.fr ) Langage Fortran(Avancé) 26 mars 2021 2 / 328 Table des matières II Constructeur de structure : norme 2003 Symbole % d’accès à un champ Types dérivés et procédures Types dérivés et entrées/sorties 5 Programmation structurée Introduction Boucles DO Le bloc SELECT-CASE La structure block 6 Extensions tableaux Définitions (rang, profil, étendue, ...) Manipulations de tableaux (conformance, constructeur, section, taille, ...) Initialisation de tableaux Sections de tableaux Sections irrégulières Tableau en argument d’une procédure (taille et profil implicites) Section de tableau non contiguë en argument d’une procédure Fonctions intrinsèques d’interrogation (maxloc, lbound, shape, ...) Fonctions intrinsèques de réduction (all, any, count, sum, . . . ) Fonctions intrinsèques de multiplication (matmul, dot_product, . . . ) Fonctions intrinsèques de construction/transformation (reshape, pack, . . . ) Instruction et bloc WHERE Expressions d’initialisation Patrick Corde Hervé Delouis ( Patrick.Corde@idris.fr ) Langage Fortran(Avancé) 26 mars 2021 3 / 328 Table des matières III Exemples d’expressions tableaux 7 Gestion mémoire Expressions de spécification Tableaux automatiques Tableaux dynamiques ALLOCATABLE, profil différé Argument muet ALLOCATABLE : norme 2003 Composante allouable d’un type dérivé : norme 2003 Allocation d’un scalaire ALLOCATABLE : norme 2003 Allocation/réallocation via l’affectation : norme 2003 Procédure MOVE_ALLOC de réallocation : norme 2003 8 Pointeurs Définition, états d’un pointeur Déclaration d’un pointeur Symbole => Symbole = appliqué aux pointeurs Allocation dynamique de mémoire Imbrication de zones dynamiques Fonction NULL() et instruction NULLIFY Fonction intrinsèque ASSOCIATED Situations à éviter Déclaration de « tableaux de pointeurs » Passage d’un pointeur en argument de procédure Passage d’une cible en argument de procédure Patrick Corde Hervé Delouis ( Patrick.Corde@idris.fr ) Langage Fortran(Avancé) 26 mars 2021 4 / 328 Table des matières IV Pointeur, tableau à profil différé et COMMON Liste chaînée 9 Interface de procédures et modules Interface implicite : définition Interface implicite : exemple Arguments : attributs INTENT et OPTIONAL Passage d’arguments par mot-clé Interface explicite : procédure interne Interface explicite : 5 possibilités Interface explicite : bloc interface Interface explicite : ses apports Interface explicite : module et bloc interface Interface explicite : module avec procédure Cas d’interface explicite obligatoire Argument de type procédural et bloc interface 10 Interface générique Introduction Exemple avec module procedure Exemple : contrôle de procédure F77 11 Surcharge ou création d’opérateurs Introduction Interface operator Interface assignment Patrick Corde Hervé Delouis ( Patrick.Corde@idris.fr ) Langage Fortran(Avancé) 26 mars 2021 5 / 328 Table des matières V 12 Contrôle de visibilité, concept d’encapsulation et gestion de zones dynamiques Introduction Instructions PRIVATE et PUBLIC Attributs PRIVATE et PUBLIC Type dérivé semi-privé Exemple avec contrôle de la visibilité Paramètre ONLY de l’instruction USE 13 Nouveautés sur les E/S Accès aux fichiers pré-connectés OPEN (status, position, pad, action, delim) INQUIRE (recl, action, iolength,...) Entrées-sorties sur les fichiers texte (advance=’no’) Paramètres IOSTAT et IOMSG de l’instruction READ Paramètres IOSTAT et IOMSG de l’instruction READ Instruction NAMELIST Spécification de format minimum 14 Nouvelles fonctions intrinsèques Accès à l’environnement, ... Précision/codage numérique : tiny/huge, sign, nearest, spacing, ... Mesure de temps, date, nombres aléatoires Transformation (transfer) Conversion entiers/caractères (char, ichar, ...) Comparaison de chaînes (lge, lgt, lle, llt) Patrick Corde Hervé Delouis ( Patrick.Corde@idris.fr ) Langage Fortran(Avancé) 26 mars 2021 6 / 328 Table des matières VI Manipulation de chaînes (adjustl, index, ...) Opérations sur les bits (iand, ior, ishft, ...) Patrick Corde Hervé Delouis ( Patrick.Corde@idris.fr ) Langage Fortran(Avancé) 26 mars 2021 7 / 328 Introduction 1 Introduction Historique Compatibilité norme 77/90 Apports de Fortran 90 Apports de Fortran 95 bibliographie documentation 2 Généralités 3 Procédures récursives 4 Types dérivés 5 Programmation structurée 6 Extensions tableaux 7 Gestion mémoire 8 Pointeurs Patrick Corde Hervé Delouis ( Patrick.Corde@idris.fr ) Langage Fortran(Avancé) 26 mars 2021 8 / 328 Introduction 9 Interface de procédures et modules 10 Interface générique 11 Surcharge ou création d’opérateurs 12 Contrôle de visibilité, concept d’encapsulation et gestion de zones dynamiques 13 Nouveautés sur les E/S 14 Nouvelles fonctions intrinsèques Patrick Corde Hervé Delouis ( Patrick.Corde@idris.fr ) Langage Fortran(Avancé) 26 mars 2021 9 / 328 Introduction Historique • Code machine (notation numérique en octal) ; • Assembleurs de codes mnémoniques ; • 1954 : projet création du premier langage symbolique FORTRAN par John Backus d’IBM (Mathematical FORmula TRANslating System) : • Efficacité du code généré (performance) ; • Langage quasi naturel pour scientifiques (productivité, maintenance, lisibilité). • 1957 : Livraison des premiers compilateurs ; • 1958 : Fortran II (IBM) ⇒sous-programmes compilables de façon indépendante. • Généralisation aux autres constructeurs mais : • divergences des extensions ⇒nécessité de normalisation ; • ASA American Standards Association (ANSI American Nat. Standards Institute). Comité chargé du développement d’une norme Fortran. • 1966 : Fortran IV (Fortran 66) ; • Évolution par extensions divergentes. . . • 1977 : Fortran V (Fortran 77). quasi compatible : aucune itération des boucles nulles (DO I=1,0) • Nouveautés principales : • type caractère ; • IF-THEN-ELSE ; • E/S accès direct et OPEN. Patrick Corde Hervé Delouis ( Patrick.Corde@idris.fr ) Langage Fortran(Avancé) 26 mars 2021 10 / 328 Introduction Historique • Travail des comités X3J3/ANSI et WG5/ISO pour moderniser Fortran 77 : • Standardisation : inclusion d’extensions ; • Développement : nouveaux concepts déjà exploités par langages plus récents APL, Algol, PASCAL, Ada ; . . . • Performances en calcul scientifique ; • Totalement compatible avec Fortran 77. • 1991/1992 : Norme Fortran 90 (ISO et ANSI) ; • 1994 : Premiers compilateurs Fortran 90 Cray et IBM ; • 1997 : Norme Fortran 95 (ISO et ANSI) ; • 1999 : Premiers compilateurs Fortran 95 sur Cray T3E puis IBM RS/6000 ; • septembre 2004 : Norme Fortran 2003 (ISO et ANSI) ; • octobre 2010 : Norme Fortran 2008 (ISO et ANSI). • novembre 2018 : norme Fortran 2018 (ISO et ANSI). Patrick Corde Hervé Delouis ( Patrick.Corde@idris.fr ) Langage Fortran(Avancé) 26 mars 2021 11 / 328 Introduction Compatibilité norme 77/90 Compatibilité norme 77/90 • La norme 77 est totalement incluse dans la norme 90. • Quelques comportements différents : • beaucoup plus de fonctions/sous-progr. intrinsèques ⇒risque d’homonymie avec procédures externes Fortran 77 et donc de résultats différents ! EXTERNAL recommandé pour les procédures externes non intrinsèques, • attribut SAVE automatiquement donné aux variables initialisées par l’instruction DATA (en Fortran 77 c’était « constructeur dépendant ») ; • E/S - En lecture avec format, si Input list > Record length (ou plus exactement si une fin d’enregistrement est atteinte avant la fin de l’exploration du format associé à la valorisation de l’input list) : • OK en Fortran 90 car au niveau de l’OPEN, PAD="YES" pris par défaut. • Erreur en Fortran 77 ! Patrick Corde Hervé Delouis ( Patrick.Corde@idris.fr ) Langage Fortran(Avancé) 26 mars 2021 12 / 328 Introduction Apports de Fortran 90 Apports de Fortran 90 • Procédures internes (CONTAINS), modules (USE) ; • « Format libre », identificateurs, déclarations ; • Précision des nombres : KIND ⇒portabilité ; • Objets de types dérivés ; • DO–END DO, SELECT CASE, WHERE ; • Extensions tableaux : profil, conformance, manipulation, fonctions ; • Allocation dynamique de mémoire (ALLOCATE) ; • Pointeurs ; • Arguments : OPTIONAL, INTENT, PRESENT. Passage par mot-clé ; • Bloc interface, interface générique, surcharge d’opérateurs ; • Procédures récursives ; • Nouvelles fonctions intrinsèques ; • Normalisation directive INCLUDE. Patrick Corde Hervé Delouis ( Patrick.Corde@idris.fr ) Langage Fortran(Avancé) 26 mars 2021 13 / 328 Introduction Apports de Fortran 95 Apports de Fortran 95 • FORALL(i=1:n,j=1:m,y(i,j)/=0.) x(i,j)=1./y(i,j) (cf. Annexe C page 321). • Les attributs PURE et ELEMENTAL pour des procédures sans effet de bord et pour le second des arguments muets élémentaires mais appel possible avec arguments de type tableaux (cf. Annexe C pages 317, 319). • Fonction intrinsèque NULL() pour forcer un pointeur à l’état nul y compris lors de sa déclaration (cf. chap. 7 page 153). • Libération automatique des tableaux dynamiques locaux n’ayant pas l’attribut SAVE (cf. chap. 6 page 133). • Valeur initiale par défaut pour les composantes d’un type dérivé (cf. chap. 3 page 59). • Fonction intrinsèque CPU_TIME (cf. chap. 14 page 249). • Bloc WHERE : imbrication possible (cf. chap. 5 page 123). • Expressions d’initialisation étendues (cf. chap. 5 page 123). • MAXLOC/MINLOC : ajout argument dim (cf. Chap. 5 page 93). • Ajout generic_spec (cf. Chap. 9 page 197) au niveau de l’instruction END INTERFACE [generic_spec] uploads/s1/ idris-fortran-avance-cours.pdf
Documents similaires
-
17
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Aoû 08, 2021
- Catégorie Administration
- Langue French
- Taille du fichier 1.2102MB