H2120

Embed Size (px)

DESCRIPTION

gfg

Citation preview

  • Toute reproduction sans a

    H 2

    12

    0

    12

    - 1

    993

    Fortran

    par Patrice LIGNELETcole Nationale Suprieure dlectronique et de ses Applications (ENSEA)(division des Administrateurs)Animateur du groupe Fortran lAFNOR

    1. Structure gnrale du langage............................................................. H 2 120 - 21.1 Exemple de programme Fortran 90 ........................................................... 21.2 Architecture des programmes.................................................................... 21.3 Structure lexicale ......................................................................................... 2

    2. Types et oprateurs ................................................................................. 32.1 Types scalaires prdfinis........................................................................... 32.2 Types structures (ou drivs ) ............................................................... 4utorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique H 2 120 1

    2.3 Tableaux ....................................................................................................... 52.4 Objets points .............................................................................................. 5

    3. Instructions de dclaration ................................................................... 53.1 Typage des objets........................................................................................ 53.2 Les deux syntaxes orthogonales de dclaration....................................... 63.3 Liste des attributs de dclaration ............................................................... 6

    4. Charpente algorithmique des programmes ...................................... 64.1 Expressions.................................................................................................. 64.2 Instructions simples .................................................................................... 74.3 Schmas algorithmiques ............................................................................ 7

    5. Procdures ................................................................................................. 105.1 Dfinitions .................................................................................................... 105.2 Classification des procdures par localisation.......................................... 105.3 Paramtres et modes de transmission ...................................................... 105.4 Caractristiques spcifiques aux fonctions ............................................... 115.5 Blocs dinterface et applications................................................................. 115.6 Macrofonctions ............................................................................................ 11

    6. Modularit.................................................................................................. 116.1 Prsentation ................................................................................................. 116.2 Entits visibles et prives............................................................................ 126.3 Importation des ressources dun module.................................................. 12

    7. Entres-sorties .......................................................................................... 137.1 Fichiers ......................................................................................................... 137.2 Ordres gnraux.......................................................................................... 137.3 Instructions de lecture-criture................................................................... 137.4 Les fichiers de texte..................................................................................... 14

    8. Liste des procdures prdfinies......................................................... 158.1 Fonctions distributives ................................................................................ 158.2 Fonctions-attributs....................................................................................... 168.3 Fonctions de transformation ...................................................................... 168.4 Sous-programmes prdfinis..................................................................... 16

    9. Conclusion ................................................................................................. 17

    Pour en savoir plus........................................................................................... Doc. H 2 120

  • FORTRAN _____________________________________________________________________________________________________________________________

    TouteH 2 120 2

    ortran est le plus ancien (1954) langage de programmation volu en activit.Il est trs utilis pour les applications requrant des calculs numriques

    intensifs, domaine o on ne lui connat pas de concurrent srieux.Si la norme Fortran 77 a permis des progrs sensibles dans lart de (bien)

    programmer avec Fortran, son absence de rformes profondes le laissait tech-niquement dsarm pour affronter la dernire dcennie du sicle. Conscient dece danger dobsolescence, le groupe dexperts charg de cette nouvelle rvisionlui a intgr quelques-uns des concepts actuels les plus puissants, comme lamodularit (dj prsente en Ada et Pascal tendu par exemple) et le calculvectoriel.

    Parmi les autres innovations majeures, on peut citer le paramtrage des typesnumriques, les types cartsiens, les pointeurs, la rcursivit, et, le plus visible,une syntaxe libre du zonage rigide vestige des cartes perfores. En outre, grceau concept de bloc interface coupl aux modules, elle fiabilise lexploitation duconsidrable investissement logiciel reprsent par les importantes biblio-thques de sous-programmes disponibles.

    Fortran 90 reste entirement compatible avec la version antrieure (Fortran 77)du langage, ce qui permet dexploiter lexistant, mais induit la possibilit de deuxstyles dcriture des programmes. Toutefois, la nouvelle norme sinsre dans unprocessus dvolution de caractristiques reclors de la prochaine rvindfiniment.

    Ainsi dynamis par ceirremplaable pour lentechnique. Ds lors, ondans la formation initia

    F

    1. Structuredu langag

    1.1 Exemple de p

    Le programme de la figursur un chantillon dune couleur). Il illustre essenFortran 90, notamment lession en paramtre par desc(telles MAXLOC ou COUNcomme outil dexploitationdure Q_STATS).

    1.2 Architecture

    Fortran appartient la famille des langages impratifs ; il est (enprincipe) compil. Un programme Fortran se prsente matriel-lement sous la forme dun ou plusieurs fichiers de texte source,chacun comportant un certtion, ou units de compilatide dfinition de donnes programme principal. La setout module soit compil a

    Le programme excutabldans tout langage compilunits appeles, en utilisantrieurement compils e

    Fortran scrit laide dun jeu de caractres qui est unsous-ensemble de lalphabet ASCII (American Standard Code forInformation Interchange ) : reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique

    ain nombre de composants de lapplica-on : modules, procdures externes, blocs(BLOCK DATA), ainsi quun et un seulule contrainte dordre respecter est quevant son utilisation par une autre unit.

    e est cr par ldition des liens, comme, partir du programme principal et desant sil y a lieu dautres composantst rangs en bibliothque.

    les caractres alphanumriques, qui comprennent les 26 let-tres (majuscules et minuscules tant quivalentes, sauf dans unlibell ou chane de caractres), les 10 chiffres dcimaux et le blancsoulign (_) ;

    19 caractres spciaux ou de ponctuation, qui sont, outrelespace typographique :

    = + * / () , . : ! % & ; < > long terme du langage, en dgageant un certain nombreonnues comme surannes, et susceptibles de disparatreision de la norme ; le langage nest donc pas vou crotre

    s apports novateurs, Fortran 90 demeure plus que jamaissemble de la programmation numrique, scientifique et doit galement souhaiter quil reprenne toute sa placele de nos futurs ingnieurs et techniciens.

    gnralee

    rogramme Fortran 90

    e 1 dtermine les principales statistiquesvariable qualitative (par exemple, unetiellement les aspects vectoriels de

    constructeurs de tableaux, la transmis-ripteur, des fonctions prdfinies variesT), etc. Il prsente aussi le MODULE

    fiable dun service logiciel (ici la proc-

    des programmes

    Procdures externes et BLOKC DATA sont des vestiges de lancienstyle Fortran : le module devrait dsormais constituer lunique outilde dcomposition, exportant diverses ressources logicielles, dontdes procdures (figure 1). Un programme Fortran 90 typiquecomportera donc un programme principal, et modules,rpartis en un ou plusieurs fichiers-sources (le programme principaltant alors la dernire unit de compilation du dernier fichier-sourcecompil).

    Un programme principal a la structure suivante :[PROGRAM identificateur]

    [dclarations]instructions excutables

    [CONTAINSprocdures internes]

    END [PROGRAM [identificateur]]

    1.3 Structure lexicale

    n ( 0 )

  • ____________________________________________________________________________________________________________________________ FORTRAN

    Toute reproduction sans a

    Ces caractres servent construire les lments lexicaux, qui sontles plus petites entits interprtables des programmes. On distingueles mots-cls, prdfinis (qui ne sont pas rservs en Fortran), ennombre assez lev (de lordre de 75) ; ils dfinissent les caract-ristiques de donnes (ex : INTEGER, INTENT, etc.), prcisent le rledune instruction (ex : IF, CALL), etc.

    Les identificateurs sont les noms choisis par le programmeur pourdsigner ses propres entits (ex. STATS_QUALITATIVES, Q_STATS,LISTEFF, etc.). Un identificateur est form dune suite de 1 31 carac-tres alphanumriques dont le premier est une lettre. Certains iden-tificateurs sont aussi prdfinis : ils dsignent des procduresFortran (ex : SIZE, MAXLOC, DATE_AND_TIME, etc.).

    Les lments lexicaux comprennent encore les oprateurs, et lesconstantes (numriques, logiques ou chanes de caractre).

    Linstruction est la phrase lmentaire dun programme ; elleregroupe diverses entits lexicales. Toute unit de compilationcomporte des instructions de dclaration, et des instructions ex-cutables. En Fortran 90, il y a une relative indpendance entrelinstruction et la ligne de texte qui lui sert de support dans unfichier source. Plusieurs instructions courtes peuvent apparatresur une mme ligne, spares par un point-virgule. Une instructionpeut scrire sur plusieurs lignes, en terminant toutes les lignes(sauf la dernire) par un caractre &. Le cas chant, la coupurepeut intervenir au milieu dune entit lexicale ; on doit alors crireun second & juste avant le premier caractre de lentit sur la ligne

    Figure 1 Exemple de programme vectorielutorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique H 2 120 3

    suite :

    PRINT *, Ce message est peut-et&&re un peu long...

    Les commentaires sont de type fin de ligne (comme en Ada),introduits par le caractre point dexclamation : le commentairestend depuis le ! jusqu la fin de la ligne. Ex : figure 1, lignes 1 11, 21, etc. Un commentaire peut apparatre derrire un & la findune ligne initiale dune instruction rpartie sur deux ou plusieurslignes.

    Lancien style dcriture du texte source (avec dcoupage deslignes en zones) reste utilisable, avec des amliorations hrites dunouveau style. On note que, dans ce nouveau style, lespace est spa-rateur, ce qui rend lanalyse lexicale des programmes plus efficace.

    Le compilateur doit bien sr tre averti du style dcriture utilisdans un fichier-source. Cela se fera par une option de compilation,un suffixe spcifique dans le nom du fichier, etc.

    2. Types et oprateursTout programme manipule de linformation, qui peut revtir un

    certain nombre de formes simples prdfinies dans un langage, outre construite par composition de telles formes simples : ce sontles types de donnes, caractriss pour lensemble des valeurspossibles, et les oprateurs dfinis sur ces valeurs.

    2.1 Types scalaires prdfinis

    Ils sont au nombre de 5 en Fortran : entier, rel, complexe,logique et caractre. Ils sont tous paramtrables par un paramtrede type (KIND) pour en dfinir diverses variantes ou sous-types :

    nom_de_type (KIND = paramtre de sous-type)

    Il existe dans chaque cas un sous-type privilgi, correspondant la valeur par dfaut du paramtre KIND pour ce type, et dsignantle type du Fortran 77 (pour des raisons de compatibilit ascendante).

  • FORTRAN _____________________________________________________________________________________________________________________________

    TouteH 2 120 4

    Rciproquement, le paramtre de type dun objet x sobtient parla fonction prdfinie KIND (x). Lensemble des paramtres KINDdisponibles dpend du compilateur.

    Le sous-type dune constante scrit en suffixant sa valeur par leparamtre KIND voulu (sous forme dune constante) ; ex :347_INT_SHORT avec la dclaration pralable :

    Le type entier (INTEGER) est un intervalle fini de lensemblemathmatique des entiers relatifs. On peut choisir de manireportable le sous-type voulu en spcifiant le nombre minimal r dechiffres dcimaux requis, en prenant comme valeur du paramtreKIND celle de la fonction prdfinie :

    SELECTED_INT_KIND (r)

    Rciproquement, la fonction prdfinie RANGE (x) fournit lenombre maximal de chiffres dcimaux autoriss par le sous-type(entier) de lobjet x.

    Le type rel (REAL) est une approximation de lensemble math-matique des rels, forme de nombres rationnels (y compris 0) de laforme :

    o m (la mantisse) et e (lexou 16 en pratique selondisponible.

    On peut choisir de manirla prcision p souhaite, et /dsign par r (pour 10 r 1comme valeur du paramt

    SELECT

    Lancien type DOUBLE spcification :

    REAL

    o lobjet 0D0 reprse(= 0 10 0)

    Le type complexe (COMPdeux types rels identiquesUn sous-type se dfinit dopour les rels. Les constantde nombres entre parenth

    Les trois types numriqurateurs, dnots classiquecroissante :

    + et (unaires ou b* et /* * (exponentiation)

    Ces oprateurs polymorphrgles propres ; cest ainsi(troncature vers zro).

    Le type logique ou boovaleurs de vrit de la logiqLe paramtrage de ce typements restreints, et dpendment est dun mot numriqINTEGER et REAL, le type Les oprateurs logiques scroissante :.EQV. et .NEQV. (quivalen.OR..AND..NOT.

    Le type caractre (CHARACTER) correspond au jeu de caractresdisponibles sur la machine cible (celle sur laquelle le programmesexcute). Le paramtre de type KIND pour les caractres est une exi-gence asiatique ; il peut aussi donner accs des jeux de caractresmathmatiques, chimiques, musicaux...

    En fait, ce type correspond en Fortran aux chanes de caractres :il admet donc un second paramtre : LEN, qui dfinit la longueurde la chane (vide le cas chant) ; un caractre est une chane delongueur 1 (valeur par dfaut du paramtre LEN).

    Les constantes chanes sencadrent au choix par des guillemets() ou des apostrophes. Le type caractre admet un oprateurinterne : la concatnation, note //.

    On peut accder une sous-chane dune chane par la notation :chane (a : b) ; exemple : 0123456789 (N : N). Si a est omis, ilvaut 1 ; si b est omis, cest la longueur de la chane.

    Par ailleurs, Fortran dispose doprateurs de comparaison, dontle rsultat est du type logique par dfaut, admettant deux nomsdistincts :

    Ils sont applicables deux oprandes dun type scalaire quelconque,

    ExemplePARAMETER (INT_SHORT = 2)

    < = > .LT. .LE. .EQ. .NE. .GE. .GT. reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique

    m be

    posant) sont des entiers relatifs, et b = 2 larchitecture de la virgule flottante

    e portable un sous-type rel en spcifiantou lintervalle des valeurs reprsentables0 r en valeur absolue), hors 0, en prenantre KIND celle de la fonction prdfinie :

    ED_REAL_KIND (p, r)

    PRCISION correspond la nouvelle

    (Kind = KIND (0D0))

    nte le rel zro dans ce sous-type

    LEX) correspond au produit cartsien de : les composantes relle et imaginaire.

    nc par le mme paramtre de type quees complexes se dnotent par une paireses ; exemple : (0 , 1.0).

    es partagent le mme ensemble dop-ment, par ordre de priorit algbrique

    inaires)

    es agissent pour chaque type selon ses que par exemple 8 / 5 donne lentier 1

    lien (LOGICAL) correspond aux deuxue binaire, dnotes .FALSE. et .TRUE. .

    correspond seulement des encombre- du compilateur. Par dfaut, lencombre-ue (comme pour les types par dfaut COMPLEX correspondant deux mots).ont les suivants, par ordre de priorit

    ce et ou exclusif respectivement)

    sauf complexe (qui nadmet que == et /=) et logique.

    2.2 Types structures (ou drivs )

    Cest un type construit correspondant un produit cartsiendensembles (champs) htrognes. Il est considrs commescalaire par opposition aux tableaux, bien quil puisse contenir deschamps tableaux. Ce type sappelle article en Pascal, et enregistre-ment en Cobol. Le nom de type driv adopt par la norme est regret-table, car il reprend celui dun concept du langage Ada qui na aucunrapport.

    Un type structure se dfinit par une numration de champs,chacun ayant un nom particulier et ses propres caractristiques.

    En Fortran 90, les structures ne sont pas paramtrables, quant leur forme (comme en Pascal, en C ou en Ada), mais on peut dimen-sionner un champ POINTER sur tableau ( 2.4). On peut obliger lecompilateur implmenter les champs dans lordre spcifi endotant le type de lattribut SEQUENCE :

    TYPE client ; SEQUENCEINTEGER code, etc.

    Laccs un champ dun objet structure se dnote laide ducaractre %.

    Une valeur structure se construit en numrant les valeurs deschamps dans lordre.

    ExempleTYPE client

    INTEGER CODECHARACTER (LEN = 50) nomCHARACTER (30) villeINTEGER code-postal, &

    soldeEND TYPE client

    Un objet de ce type se dclare ainsi :TYPE (client) quidam

    Exemplequidam % nom

    Exemplequidam = CLIENT (1, Dupont, Paris, 75001, 0)

  • ____________________________________________________________________________________________________________________________ FORTRAN

    Toute reproduction sans a

    2.3 Tableaux

    Un tableau est une collection de donnes homognes. Cettehomognit a permis de btir des architectures matrielles mas-sivement parallles, dites vectorielles, pour appliquer simultan-ment une mme opration tout ou partie dun tableau. Fortran 90sadapte ce progrs technologique, en traitant le tableau commeun objet de premire classe (comme en PL /1), escort dunepanoplie doutils favorisant le calcul vectoriel.

    En Fortran, la structure de tableau est une proprit de lobjet (etnon un type) ; elle se dfinit par les caractristiques suivantes :

    son rang, ou nombre de dimensions ; parconvention, tout scalaire est de rang 0 ;

    chaque dimension possde un intervalle de dfinition, donnpar deux entiers, et une tendue, qui est la longueur de cet intervalle(bornes comprises). En Fortran 90, une tendue peut tre nulle, letableau tant alors vide ;

    la taille dun tableau est le produit de ses tendues. Untableau vide est de taille 0 ;

    son profil est le vecteur (tableau de rang 1) de ses tendues.Le profil dun scalaire est le vecteur vide. Dcompatibles sils ont le mme profil ; par concompatible avec tout tableau.

    Fortran 90 permet de dfinir des table(constant ou calculable), et profil diffr (

    Dans le cas dun profil explicite, la strindique dans un attribut de dimension parde dfinition de ses diverses dimensions :

    (i1 : s1 , i2 : s2 , ... , in : sn ) av

    la borne infrieure (in :) pouvant tre omise

    Un tableau profil diffr est dfini dynamde dimension nen prcise que le rang, par : . Il reoit en outre lattribut ALLOCATACONTROLLED en PL /1).

    Dans le cours du calcul, une fois les dimetableau est cr avec les dimensions votion ALLOCATE ( 4.1).

    Laccs un lment de tableau sopdindices (expressions entires quelconquerang du tableau.

    On peut aussi accder un sous-tableau,

    avec une notation par triplet , copseudo-boucle qui dnote une suite dindicemtique.

    La notation a : b : r reprsente la progresset de raison r extraite de lintervalle a : b. La(quivalent la notion de tranche en Ada). Deexistent, pour dsigner tout le dbut de linterune dimension (: b), toute la fin (: a), ou lin

    avec un indice vectoriel.

    Un indice vectoriel peut contenir des valeurs en double, aveccertaines limitations quant leur emploi, lorsque lopration entraneune smantique ambigu.

    2.4 Objets points

    Un objet point est cr dynamiquement par le programmeur, etreste sous son contrle. Un tel objet se dfinit par son modle(type + rang le cas chant), et par une variable (POINTER), quirecevra ladresse de lobjet une fois cr.

    ExemplePARAMETER (N = 5, M =DIMENSION T3 (N , 0 : M , N

    ExempleREAL, ALLOCATABLE : : MAT (: , :)

    ExemplesMAT (i , j + k)

    ou T3 (1 , i * j , k / i + 2

    Exemple

    T3 (2 : N , M : 1 : 1 , 1 : M

    ( 7 en Fortran)

    ExempleINTEGER, DIMENSION (4) : : INDEX = (/ 2, 0, 1, 10/)DIMENSION VECT (0 : 20)

    alors VECT (INDEX) dsigne le vecteur :

    (/ Vect (2), Vect (0), Vect (1), Vect (10) /)

    ExempleINTEGER, POINTER : : P ! pointeur vers un objet entierTYPE maillon ! lment dune liste chaneutorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique H 2 120 5

    eux tableaux sont ditsvention, un scalaire est

    aux profil explicitetableaux dynamiques).

    ucture du tableau est la liste des intervalles

    ec

    lorsquelle vaut 1.

    iquement ; son attributune liste de caractresBLE ( rapprocher de

    nsions dtermines, leulues par une instruc-

    re laide dune listes) en nombre gal au

    de deux manires :

    rrespondant unes en progression arith-

    ion de premier terme a raison par dfaut est 1s notations simplifiesvalle de dfinition danstervalle en entier (:) ;

    Fortran 90 laisse une certaine ambigut dnotationnelle :lidentificateur dclar avec lattribut POINTER dsigne tantt lepointeur, tantt lobjet point, selon le contexte syntaxique ; ainsi :

    temp = maillon (10, premier) ! objet pointtemp => premier ! pointeur

    De mme, le champ Succ du maillon dadresse Premier se dnote( la manire dAda) : Premier % Succ.

    La constante (valeur symbolique) adresse note NIL en Pascal etNULL en PL /1 ou Ada sobtient par une instruction sur pointeur (s)en Fortran 90 :

    NULLIFY (temp) ! temp : = NIL en Pascal.

    La cration dynamique dun objet point se ralise par le mmeordre ALLOCATE que pour les tableaux profil diffr.

    Fortran 90 permet encore de redfinir dynamiquement unevariable statique ou automatique, voire un paramtre, qui doit alorsrecevoir lattribut TARGET dans sa dclaration (pour permettre aucompilateur doptimiser la gestion des autres variables).

    Un pointeur est associ dynamiquement une cible par uneaffectation dadresse (=> ; 4.2.1).

    3. Instructions de dclaration

    3.1 Typage des objets

    Il existe deux sortes dobjets (ou donnes) : les constantes, et lesvariables. Les variables se dsignent toujours par un identificateur.Les constantes peuvent aussi le cas chant tre nommes ( 3.2,attribut PARAMETER). Les objets nomms (constantes et variables)doivent tre typs en Fortran. Ce typage sopre soit implicitement,

    10) + M)

    ! rang = 2

    )

    : 2)

    n 7

    INTEGER valeurTYPE (maillon), POINTER : : succ

    END TYPE maillonTYPE (maillon), POINTER : : premier, tempREAL, POINTER : : PVECT (:) ! pointeur vers un vecteur

    ! rel

    ExempleALLOCATE (temp, pvect (0 : 10))

    ExempleTARGET : : CIBLE (10, 10)

  • FORTRAN _____________________________________________________________________________________________________________________________

    TouteH 2 120 6

    daprs la lettre initiale du nom de lobjet ; soit explicitement, aumoyen dune dclaration de type de lobjet. Par dfaut, tout objetnomm non dclar est du type entier si son nom commence parune lettre de I N, et rel sinon.

    Le typage implicite peut tre modifi au moyen dune instructionde dclaration IMPLICIT associant un ensemble de lettres unespcification de type. Par dfaut, on a ainsi :

    IMPLICIT INTEGER (I-N), REAL (A-H, O-Z)

    Au contraire, si lon veut proscrire tout typage par dfaut (pourdes logiciels hautement critiques par exemple), on peut utiliser ladclaration :

    IMPLICIT NONE

    Une dclaration IMPLICIT se place en premier lieu dans une unitde programme (aprs dventuelles dclarations dimportationUSE : 6).

    3.2 Les deux syntaxes orthogonalesde dclaration

    En Fortran 77, un objet pouvait avoir au plus quatre proprits.Aussi existait-il une instruction de dclaration spcifique pourchacune :

    une dclaration de ty PARAMETER pour les DIMENSION pour les SAVE pour les variab DATA pour initialiser

    METER).

    Fortran 90 distingue unincompatibles). Plutt queentre autant dinstructions ddu style prcdent (une dproprits dune mme entiAinsi, les deux systmes de

    1) LOGICALDIMENSSAVE BO

    2) LOGICAL

    En Fortran 90, une dcla

    spcification de type [, liste

    o la spcification de tyindiques au paragraphe 2

    Nota : les entits entre crochets sovent figurer zro ou plusieurs fois.

    3.3 Liste des attr

    Lattribut est (ou commproprit de lobjet. En susPARAMETER pour uDIMENSION (....) pour uSAVE pour uALLOCATABLE pour uPOINTER pour uTARGET pour u

    PUBLIC / PRIVATE pour u

    EXTERNAL / INTRINSIC pour une procdure transmiseen paramtre

    Remarque : lattribut DIMENSION peut tre remplac par unattribut de dimension ( 2.3) plac la suite du nom de lobjet.

    4. Charpente algorithmique des programmes

    Toute unit procdurale (programme principal ou procdure)comprend deux parties : une section dclarant les entits locales lunit, et une squence dinstructions excutables exprimant la suitedes calculs mener pour rsoudre un problme donn. Ces ins-tructions comprennent les instructions simples, et des instructionscomposes traduisant la structure algorithmique de lunit.

    Ces diverses instructions font intervenir des expressions, ausens mathmatique du terme, que lon prsente en premier lieu.

    INTENT (....)

    OPTIONAL pour u

    ExempleLOGICAL, SAVE : : BOOL (5) reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique

    pe explicite le cas chant ; constantes nommes ;tableaux ;les rmanentes (statiques) ;les variables (incompatible avec PARA-

    e dizaine de proprits (dont certaines dmietter la dclaration dune entite dclaration, on peut dsormais, ct

    claration par proprit), regrouper lest dans une dclaration de type explicite. dclarations suivants sont quivalents :

    BOOLION BOOL (5)OL

    , DIMENSION (5), SAVE : : BOOL

    ration complte se prsente donc ainsi :

    dattributs] &: : identificateur [= valeur] {, id [=v]}

    pe (scalaire) prend lune des formes.1.nt dun usage facultatif, les entits entre accolades peu-

    ibuts de dclaration

    ence par) un mot-cl dcrivant une du type, on peut ainsi utiliser :ne constante nomme ;n tableau ;ne variable rmanente ;n tableau profil diffr ;ne variable accessible par pointeur ;ne variable redfinissable par pointeur ;

    ne entit dclare dans un module ;

    4.1 Expressions

    Une expression exprime un calcul, et possde une valeur, rsultatde ce calcul lorsque lexpression est value. Elle prend la formedune constante, dune variable (la valeur tant celle de la variableau moment de lvaluation), dun sous-objet (dune constante oudune variable tableau, structure ou chane de caractres), dunconstructeur de tableau ou de structure ( 2.2 et 2.3), dun appelde fonction (prdfinie ou non), dune opration portant sur desfacteurs qui sont des expressions, ou dune expression entreparenthses.

    Dans le cas dune expression combinant plusieurs oprateurs,lordre dvaluation repose sur des rgles de priorit entre opra-teurs, comme en algbre :

    a + b / c d est ainsi valu comme

    Nous avons donn les priorits relatives des oprateurs pourchaque type de donnes ( 2.1). Ces catgories doprateurs sonteux-mmes hirarchiss ainsi, selon lordre croissant des priorits :1) oprateurs logiques2) concatnation3) oprateurs de comparaison4) oprateurs arithmtiques.

    Lorsquune opration arithmtique ou de comparaison portesur 2 facteurs de types numriques diffrents, il y a conversion delun des facteurs en une valeur aussi semblable que possible du typede lautre facteur, selon lordre hirarchique croissant des types :

    1) entier 2) rel 3) complexe

    Lorsquune opration porte sur deux facteurs de mme type maisde paramtres KIND diffrents, le facteur du sous-type le moinsexigeant est converti en une valeur de lautre sous-type.

    n paramtre de procdure ;

    Exemple :

    (0 , 1.0) + 2 donne le complexe (2.0 , 3.0).

    Exemple : 4.1 + 3.2 d 0 donne le rel 7.3 d 0 en double prcision.

    a bc----- d+

  • ____________________________________________________________________________________________________________________________ FORTRAN

    Toute reproduction sans a

    Enfin, si les deux facteurs sont scalaires, le rsultat de loprationest scalaire. Si lun est un tableau et lautre un scalaire, le rsultatest un tableau de mme profil que le facteur tableau.

    Si les deux facteurs sont des tableaux, ils doivent trecompatibles ( 2.3), le rsultat tant un tableau du mme profil.

    Il existe deux catgories dexpressions utilisables dans les dcla-rations, et soumises certaines restrictions spcifiques :

    les expressions constantes dinitialisation, utilisables pourinitialiser les variables dans une dclaration de type, ou dfinir lesconstantes nommes.

    les expressions de spcification (scalaires de type entier),dfinissant les bornes des tableaux ou les automatiques.

    4.2 Instructions simples

    4.2.1 Affectation

    Laffectation donne une nouvelle valeur variable (scalaire ou tableau). Il y a deux sFortran 90.

    Laffectation de valeur classique, prsenteimpratifs :

    (sous-)variable = express

    o la sous-variable est, le cas chant, une de structure, ou un sous-tableau. Lexpressiopuis sa valeur donne la (sous-)variable, qle cas chant. Expression et variable doiventobligatoirement du mme sous-type sauf ptous deux numriques ; dans ce dernier cas, lest convertie avant affectation si les types di

    Si la (sous-)variable est scalaire, lexpresscest un tableau, lexpression doit tre comp

    Laffectation dadresse, qui scrit :

    (sous-)variable pointeur =>

    o la cible peut tre une valeur dadresse (rsultat POINTER), ou un (sous-)objet ayant

    4.2.2 Appel de sous-programme

    Les sous-programmes, prdfinis ou non, peuvent tre considrsdu point de vue de lutilisateur comme des super-instructionsspcialises. En Fortran, on les appelle laide dune instructionCALL (comme en PL /1) :

    CALL < nom du sous-programme > [(liste des arguments dappel)]

    Les traitements prdfinis qui, dans dautres langages commePascal ou Ada, se ralisent par lappel de sous-programmes, setraduisent en Fortran par des instructions spcial ises(entres-sorties notamment, 7).

    4.2.3 Instruction de branchement GOTO

    Lenrichissement algorithmique de Fortran 90 devrait limiterconsidrablement son emploi. Elle scrit :

    GOTO tiquette

    o ltiquette est un entier positif prfixant linstruction vise.

    Exemple

    (/ (I , I = 1, 3) / ) + 2 donne le vecteur (/ 3, 4, 5 / )

    ExempleINTEGER, PARAMETER : : INDEX (0 : 3) = (/ 1, 0, 2, 4 /)

    alors :

    INDEX (0 : 2) + INDEX (1 : 3) donne le vecteur (/1, 2, 6 /)

    ExemplePARAMETER (MAXI = 50, IRESTE = MOD (MAXI, 6))

    ExempleSUBROUTINE SSP (N, C)CHARACTER (LEN = *) C ; DIMENSIO

    Exemples ( 2.4) :PREMIER => TEMPPVECT => CIBLE (:

    Exemple : figure 1, lignes 52 et 55.utorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique H 2 120

    7

    longueurs des chanes

    tout ou partie duneortes daffectations en

    dans tous les langages

    ion

    sous-chane, un champn est dabord value,ui devient ainsi dfinie tre du mme type (pasour les caractres), oua valeur de lexpressionffrent.

    ion doit ltre aussi ; siatible ( 2.3).

    cible

    pointeur, ou fonction lattribut TARGET.

    4.2.4 Instructions de retour

    Linstruction (facultative) RETURN dans une procdure permetde quitter cette procdure pour revenir au point dappel.

    Linstruction STOP arrte lexcution du programme et redonnela main au systme dexploitation. Le mot-cl STOP est suivi facul-tativement dune chane de caractres, alors affiche par le systme.

    4.2.5 Instructions pour lallocation dynamique

    Fortran 90 introduit trois instructions pour lallocation dynamique :NULLIFY (liste de (sous-)variables pointeurs) ! ( 2.4)ALLOCATE (liste de (sous-)objets [, STAT = variable scalaire

    entire])DEALLOCATE (liste de (sous-)objets [, STAT = variable

    scalaire entire])

    Ces deux dernires instructions permettent de grer lexistencede tableaux ALLOCATABLE, comme dobjets points (dans ce derniercas, elles correspondent des procdures prdfinies en Pascal :new (pseudo-fonction en Ada), et

    dispose

    respectivement).

    Dans les deux cas, la variable scalaire optionnelle reoit la valeur 0si tout sest bien pass, et une valeur positive sinon.

    En dehors de celles-ci, il existe dautres instructions simplesspcialises pour les entres-sorties ( 7), ou lies aux structuresalgorithmiques ( 4.3.2).

    4.3 Schmas algorithmiques

    La programmation structure repose sur trois schmas de base :lenchanement ou squence, le choix et litration ou boucle.Tardivement civiliss , les schmas algorithmiques du Fortran 90disposent dune syntaxe parenthse qui, linstar dAda, lesdispensent de recourir occasionnellement une forme syntaxiquespcifique pour leur associer une squence (comme DO ; .... END ;en PL /1, BEGIN .... END en Pascal, ou {....} en C).

    N IV (N + LEN (C))

    , 1)

    Exemples

    ALLOCATE (MAT (0 : N **2, N-1 : N+M) )DEALLOCATE (P, MAT, PVECT)

  • FORTRAN _____________________________________________________________________________________________________________________________

    TouteH 2 120 8

    De manire gnrale, Fortran 90 unifie la syntaxe des schmasalgorithmiques sur le modle suivant :

    [identificateur:] mot-cl [commande]corps du schma

    END mot-cl [identificateur]

    Lidentificateur optionnel sert de repre syntaxique, permettant aucompilateur de vrifier lappariement, et amliorant la lisibilit dansle cas de schmas embots.

    Remarque : lespace entre END et le mot-cl est facultatif.

    4.3.1 Schmas dcisionnels

    Un tel schma excute une squence et une seule (au plus) parmiun ensemble de squences places en exclusion mutuelle par leschma.

    Lalternative, ou schma de choix logique, scrit :

    IF (expression scalaire logique) THENsquence dinstructions excutables

    {ELSE IF (expression logique) THENsquence}

    [ELSEsquence]

    ENDIF

    Les expressions sont vsvalue vrai, la squenexpressions ont toutes la vaELSE) est excute si elle e

    Ce schma admet une fo

    IF (expression logiq

    Fortran 90 introduit uneconditionner des affectatio

    WHERE (expressionsquence d

    [ELSEWHEREsquence d

    END WHERE

    avec sa forme simplifie :

    WHERE (expression

    Tous les tableaux figuracompatibles. Lexpressionsquence qui suit WHERE,les seuls lments de tabledu filtre, et faux pour la sq

    Le schma de choix propre

    SELECT CASE (express

    CASE (slecteur1)squence1

    {CASE (slecteur)squence}

    [CASE DEFAULTsquence]

    END SELECT

    Lexpression (critre du choix) et les slecteurs sont dun mmetype discret (entier, chane de caractres, voire logique). Chaqueslecteur est une liste de valeurs simples et /ou dintervalles fermsou ouverts de valeurs, chaque valeur tant une expression constantedinitialisation ( 3.1). Lintersection de deux ensembles de valeurscorrespondant deux slecteurs doit tre vide. Est excute lunique(au plus) squence dont le slecteur contient la valeur du critre ;si aucun ne la contient, la squence DEFAULT est excute si elleest prsente.

    4.3.2 Boucles DO

    Les boucles permettent de rpter volont lexcution dunesquence. En Fortran 90, leur criture subit un profond rajeunisse-ment syntaxique. Elles enrichissent en outre de schmas algorith-

    Exemple : figure 1, lign

    ExempleWHERE (MAT >

    Exemple : (schma de choix numrique ternaire, ancien IFarithmtique) :

    SELECT CASE (critre)CASE (: 1) ; PRINT * , critre < 0CASE (0) ; PRINT * , critre nulCASE (+ 1 :) ; PRINT * , critre > 0

    END SELECT

    reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite.

    Techniques de lIngnieur, trait Informatique

    alues (dans lordre), et ds que lunece associe est seule excute ; si lesleur faux, la dernire squence (derrirest prsente.

    rme simplifie (appele IF logique) :

    ue) instruction simple excutable

    forme particulire de lalternative pourns de tableaux :

    de tableau logique)affectations de tableaux

    affectations de tableaux]

    de tableau) affectation de tableau

    nt dans un mme schma doivent tre ou filtre est dabord value. Dans la laffectation et lvaluation ont lieu surau correspondant une valeur vrai uence qui suit ELSEWHERE sil y a lieu.

    ment dit (choix discret) scrit :

    ion scalaire dun type discret)

    miques absents du langage antrieurement.

    Il y a deux sortes de boucles DO en Fortran 90 :

    Boucle de parcours

    :

    DO variable indice = a, b [, r]squence dinstructions excutables

    END DO

    donne successivement lindice les valeurs de la progression arith-mtique de premier terme a et de raison r extraite de lintervalle[a, b] ( 2.3, notation par triplet), et excute la squence pour chaquevaleur (

    0 fois si la progression est vide

    ).

    a, b et r peuvent tre des expressions scalaires quelconques detype entier. Lindice doit aussi tre scalaire et de type entier ; aprssortie normale de la boucle, il est gal la premire valeur de laprogression extrieure lintervalle (soit 0 dans lexemple ci-dessus),comme en PL /1 ou en C.

    Boucles de recherche

    :

    DO WHILE (expression scalaire logique)squence dinstructions excutables

    END DO

    qui excute la squence tant que lexpression vaut vrai.

    Le test darrt dune boucle de recherche WHILE est effectu audbut de chaque itration. Fortran 90 permet de le placer en un pointquelconque du corps de la boucle grce au schma (dit bouclen + 1 /2 de Dijkstra) :

    DOsquence1IF (expression logique test darrt) EXITsquence2

    END DO

    La boucle WHILE correspond une squence1 vide, la bouclerepeat....until du Pascal (ou do....while de C) une squence2 vide.

    es 22 32.

    0.0) MAT = LOG (MAT) / MAT

    Exemple

    HARMO = 0.0DO I = 100, 1, 1

    HARMO= HARMO + 1.0 / IEND DO

    Exemple :

    figure

    2

    , lignes 78-85.

  • ____________________________________________________________________________________________________________________________ FORTRAN

    Toute reproduction sans a

    Plus gnralement, toute boucle peut coEXIT, ou CYCLE, provoquant les effets suiva

    EXIT (instruction de mme nom en Adade quitter la boucle ;CYCLE (continue en C) permet de passe

    Figure 2 Exemple de module exportant un t

    utorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique

    H 2 120

    9

    ntenir une instructionnts :

    , et

    break

    en C) permet

    r litration suivante.

    Ces deux instructions oprent sur la boucle la plus interne lescontenant ; en cas de boucles embotes elles doivent mentionnerlidentifcateur-repre prfixant la boucle concerne si ce nest pasla plus interne.

    ype abstrait

  • FORTRAN _____________________________________________________________________________________________________________________________

    TouteH 2 120 10

    5. Procdures

    5.1 Dfinitions

    Les procdures (ou sous-programmes selon les langages, en Adapar exemple) sont dfinies dans larticle Langages de programma-tion. Introduction [H 2 000]. Elles concourent dcouper une appli-cation en units rduites, plus facilement comprhensibles, etaccroissent de ce fait sa maintenabilit.

    Une procdure est comparable un programme principal, tant auplan de sa logique dexcution, que de sa structure syntaxique. Ladiffrence majeure est que le programme est lanc par unecommande du systme dexploitation, tandis quune procduresexcute par appel depuis une instruction Fortran.

    Il y a deux catgories syntaxiques de procdures en Fortran : les sous-programmes (SUBROUTINE), qui dfinissent une

    action, et qui sont appels par une instruction CALL ( 4.2.2) ; ilscorrespondent aux procdures de Pascal ou Ada, et aux fonctionsde type void en C ;

    les fonctions (FUNCTION), qui calculent une valeur scalaire outableau (procdure .... returns .... en PL /1), et dont lappel se placedans une expression.

    Une procdure admet uparamtres (ou argumendinformation avec lunit a

    La figure 1 montre un elignes 16-39), la figure 2 det un de fonction (L_VIDE,

    En Fortran 90, une procdprocdures peuvent tre odoit alors tre prfix du m

    Fortran offre en outre un (plus dune centaine) ( 8).

    5.2 Classificationpar localisati

    Il existe trois catgories les procdures extern

    formant chacune une unit les procdures de mo les procdures intern

    qui ne peuvent pas elles(contrairement aux langageou Ada), ni tre transmises

    Les procdures externesthques Fortran. Mais, avecces par des procdures rerelle fiabilit aux appels.

    Syntaxiquement les procde leur hte, dans une secCONTAINTS (comme pour

    5.3 Paramtres e

    Fortran admet des paraduraux. Linstruction dentparamtres : leurs caractrdclarent dans la section d

    Fortran 90 reconnat quatre modes de transmission des donnes,dont trois, analogues ceux du langage Ada, se dclarentexplicitement par lattribut INTENT (cf. les diverses procdures desfigures 1 et 2) :

    paramtres dentre, qui sont des constantes locales laprocdure (comme en Ada), et reoivent lattribut INTENT (IN) (cestle seul mode existant en C) ;

    paramtres rsultats, dfinis par la procdure (qui peut lesutiliser ensuite, contrairement Ada), qui reoivent lattribut INTENT(OUT) ;

    les paramtres mixtes ( la fois dentre et rsultats), quireoivent lattribut INTENT (INOUT).

    Le mode de transmission par dfaut est le quatrime mode, le seuldisponible en Fortran 77 (cest aussi celui de PL /1) ; retenu par nces-sit de compatibilit, il noffre aucune garantie. Cest lemploi quiest fait de paramtre par la procdure qui dicte son mode logique : sil est modifi, largument dappel (ou argument rel)doit tre une variable (comme dans les nouveaux modes OUT etINOUT), sinon ce peut tre une expression quelconque.

    Il ny a pas de mode de transmission explicite pour les paramtresprocduraux. On peut dclarer, comme en Pascal, linterface formelledune procdure paramtre au moyen dun bloc dinterface ( 5.5 et

    reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite.

    Techniques de lIngnieur, trait Informatique

    n nombre fixe (ventuellement nul) dets formels) permettant un changeppelante.

    xemple de sous-programme (Q_STATS,

    autres exemples de sous-programmeslignes 28-33).

    ure peut en contenir dautres ( 5.2). Lesptionnellement rcursives : leur entteot-cl RECURSIVE (comme en PL /1).

    grand nombre de procdures prdfinies

    des procdureson

    de procdures selon leur localisation :

    es

    (les seules existant en Fortran 77), de compilation ;

    dule

    ( 6) ;

    es

    une autre procdure (leur hte), et-mme contenir de procdure internes structure de bloc comme PL /1, Pascal en argument.

    sont les composants actuels des biblio- Fortran 90, elles devraient tre rempla-groupes en modules, garantissant une

    dures internes sont regroupes la fintion spcifique introduite par le mot-cl un module : figure

    2

    ).

    t modes de transmission

    mtres de tout type, y compris proc-te de la procdure cite le nom seul des

    istiques et leur mode de transmission seclarative de la procdure.

    figure

    2

    , lignes 67-71).

    Largument associ devra tre dclar EXTERNAL dans la proc-dure dappel (ou INTRINSIC si cet argument est une procdure pr-dfinie).

    Les paramtres dentre ne peuvent avoir, comme en Ada, devaleur par dfaut explicite, mais Fortran 90 offre un mcanisme plusgnral : les paramtres optionnels, recevant lattribut OPTIONAL.La prsence ou non dun argument associ lors dun appel est dtec-te par la fonction logique prdfinie PRESENT.

    Lors de lappel dune procdure, lassociation des argumentsdappel avec les paramtres utilise les deux procds noncsdans larticle

    Langages de programmation. Introduction

    [H 2 000],comme en Ada :

    positionnel, commun la plupart des langages ; associatif, utilisant les noms des paramtres comme mots-cls

    locaux ; ce dernier procd, outre sa grande lisibilit, est souventindispensable lorsque des paramtres optionnels sont omis.

    Il doit y avoir identit de sous-type entre arguments et paramtresapparis. Si le paramtre est un tableau, largument doit tre untableau de mme rang ; mais le profil du paramtre nest passpcifi : il hrite de celui de largument (figure

    1

    , lignes 18 et 20) ;il en est de mme pour la longueur dun paramtre de type chanede caractres. Un tableau paramtre ne peut pas recevoir lattributALLOCATABLE.

    De faon plus gnrale quen Pascal (niveau 1 de la norme ISO),on peut imposer des contraintes aux bornes dun paramtre tableau,ou la longueur dune chane, laide dexpressions de spcificationfaisant intervenir dautres paramtres.

    Exemple

    SUBROUTINE P (N, X, RES)INTEGER, INTENT (IN), OPTIONAL : : NREAL, INTENT (OUT), OPTIONAL : : RESIF (PRESENT (N)) THEN ; NN = N

    ELSE ; NN = 0 ! valeur par dfaut.ENDIFIF (PRESENT (RES)) RES = ....

    Exemple

    CALL P (X = 3.0 * A + B, RES = SORTIE) ! N est omis

  • ____________________________________________________________________________________________________________________________ FORTRAN

    Toute reproduction sans a

    5.4 Caractristiques spcifiquesaux fonctions

    Le type dune fonction est soit implicite, soit explicite. Sil est expli-cite, la spcification de son type peut prfixer linstruction FUNCTIONdentte (comme en C ; figure 2, ligne 28), ou figurer dans la sectiondclarative. Ce type doit tre connu au point dappel, au besoin parune dclaration de type du nom de la fonction.

    Une fonction renvoie sa valeur par une variable-rsultat qui estnormalement le nom de la fonction (figure 2, ligne 32). Mais on peutaussi suffixer linstruction FUNCTION par une clause RESULT(variable) : cest alors cette variable qui doit tre utilise. Ce dernierprocd est obligatoire si la fonction est RECURSIVE, le nom de lafonction tant alors rserv aux appels rcursifs.

    Il faut noter quen Fortran, la variable-variable : elle doit tre dfinie, mais peu(contrairement Pascal).

    5.5 Blocs dinterface et app

    Les bibliothques de procdures externeprsent offrent le grand inconvnient decompilateur de contrler la validit des appoutil logiciel spcialis). Fortran 90 formalise ulinterface formelle dune procdure : le lutilisateur peut inclure dans son programdans un module : 6).

    On y dfinit compltement linterface formprocdures, telle quelle figure dans le texte o( de possibles variations syntaxiques prs, paramtres, lordre des dclarations, etc.). Cse place(nt) dans la section dclarative de l

    Au-del de leur intrt en terme de fiabilitont de nombreuses applications.

    Rendant visible linterface formelle dunebloc dinterface permet dutiliser lappel asso

    Dfinition doprateurs associs desbinaires.

    qui, pour deux ensembles A et B, permet volont comme UNION (A, B) ou A + B.

    Cette facult nest pas, comme en Ada, rdoprateurs prdfinis : lutilisateur peut c(identificateurs) crits entre deux points (clogiques), par exemple : .IN.

    Affectation gnraliseUn sous-programme ayant deux paramtres, dont le premier a le

    mode de transmission OUT ou INOUT et le second le mode IN,peut tre appel par une affectation de valeur au premierparamtre :

    INTERFACE ASSIGNMENT (=)

    SUBROUTINE CHAR_TO_NUM (N, CH)

    INTENT (OUT) : : N

    CHARACTER (LEN = *), INTENT (IN) : : CH

    END SUBROUTINE

    END INTERFACE

    permet toute affectation dune chane de caractres unevariable scalaire entire dtre interprte comme un appel deCHAR_TO_NUM.

    GnricitIl faut entendre ce terme la manire de PL /1 : dfinition dun

    nom unique pour la mme opration conceptuelle ralise techni-quement par diverses procdures selon le contexte ; en Ada, lqui-valent est assur par la surcharge, ou homonymie naturelle propre ce langage (la gnricit y dfinit un modle paramtr la

    ExempleSUBROUTINE SSP (U, X, Y)

    DIMENSION U (: , :) ! profil hrit.REAL, INTENT (IN), DIMENSION (SIZE (U,1)) : : X, Y

    Exemple : figure 2, lignes 67-71 (pour umais la forme est identique pour toute procd

    ExempleINTERFACE OPERATOR (+)

    TYPE (ENSEMBLE) FUNCTION UTYPE (ENSEMBLE), INTENT (

    ENDEND INTERFACE

    utorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique

    H 2 120

    11

    rsultat est une vraiet ensuite tre value

    lications

    s thsaurises jusqu ne pas permettre auels (saufs utiliser unn procd pour dcrirebloc dinterface, que

    me dappel (ou mieux,

    elle dune ou plusieursriginal de la procdure

    telles que les noms dese(s) bloc(s) dinterface

    unit utilisatrice.

    , les blocs dinterfaces

    procdure externe, un

    ciatif mot-cl

    ( 5.2).

    fonctions unaires ou

    dappeler la fonction

    serve aux seuls nomsrer ses propres nomsomme les oprateurs

    compilation). Ce concept nest pas nouveau en Fortran : depuis lanorme 77, la plupart des fonctions prdfinies sont gnriques.

    Ainsi, pour dfinir une opration gnrique dchange de lavaleur de deux variables :

    INTERFACE ECHANGER ! la procdure gnrique

    SUBROUTINE I_SWAP (I, J)

    INTENT (INOUT) : : I, JEND

    SUBROUTINE R_SWAP (U, V)

    INTENT (INOUT) : : U, VEND

    SUBROUTINE MAT_SWAP (M1, M2)

    REAL, INTENT (INOUT), DIMENSION (: , :) : : M1, M2END

    END INTERFACE

    5.6 Macrofonctions

    la manire de C (#define), Fortran permet de dfinir desmacrofonctions, dintrt purement local aux units procduralesqui les dfinissent, et destines crire une seule fois une expres-sion de structure donne.

    6. Modularit

    6.1 Prsentation

    Le module Fortran correspond la classe introduite par Simula 67,au package (paquetage) de Ada, et lunit de mme nom en Pascaltendu et Modula-2. Le concept est prsent dans larticle

    Langagesde programmation. Introduction

    [H 2 000] de ce trait. Son adoptionpermet Fortran 90 doprer un saut qualitatif fondamental, et rend

    n paramtre procdural,ure).

    NION (E1, E2)IN) : : E1, E2

    Exemple

    IMPLICIT LOGICAL (B)BON_DIM (I, J, K) = K > 0. AND. K < I + JBON_TRIANGLE (I, J, K) = &Bon_dim (i, j, k) .and. Bon_dim (j, k, i).and. Bon_dim (k, i, j)

  • FORTRAN _____________________________________________________________________________________________________________________________

    Toute

    H 2 120

    12

    obsoltes de fait un certain nombre de caractristiques antrieuresparmi les plus discutes (tel le COMMON).

    Le module est une unit de programme non excutable exportantun ensemble de ressources logicielles de manire fiable. Compilablesparment, il constituera la base des futures bibliothques decomposants Fortran 90, remplaant terme (en les intgrant) les pro-cdures externes jusqualors seules disponibles.

    On distingue gnralement quatre emplois du module, par ordrede complexit croissante :

    mise disposition dun ensemble de donnes et de types(largissant le rle traditionnel des COMMON et BLOCK DATAassocis) ;

    fonction bibliothque de procdures indpendantes (maisayant un certain rapport smantique) ; dans un premier temps, oncrira des modules de cette nature pour exporter des blocsdinterface ( 5.5) fiabilisant lutilisation des bibliothques Fortranexistantes. Le module STATS_QUALITATIVES de la figure

    1

    appartient cette catgorie ; il exporte une procdure (Q_STATS),rendant visible sont interface formelle ;

    module objet abstrait grant les transitions dtat dun objet, partir dun tat initial ; cach lutilisateur, cet objet volue et estconsult au moyen de procdures exportes par le module ;

    classe proprement dite (au sens des langages objets) : cettecatgorie de module exporte un type abstrait de donnes dont lastructure reste secrte, avec son lot de primitives (procdures)publiques dfinissant les oprations sur le type. Tel est le moduleLISTE_D_ENTIERS de la figure

    2

    , exportant un type abstrait appelLISTE.

    En dehors du premier cas, tout module exporte des procduresdont limplmentation est cforme toujours une seule unentre une partie spcificaticache, comme en Pascal en Ada (interface et packagune unit utilisatrice aloconstante, seule la ralisat

    Accessoirement, un modexcutable (squence to finale begin en Ada).

    6.2 Entits visibl

    Par dfaut, toute entit donc visible par lutilisateupar dfaut PUBLIC (quivaalors donner lattribut PRIVdure) cache. on peut inveinstruction de dclaration :

    qui oblige ensuite dclaexplicite PUBLIC.

    Dans le cas des types comme en Ada :

    le type est entirement visible, nom et structure (il a, implici-tement ou explicitement, lattribut PUBLIC) ;

    le type est visible, mais sa structure est cache (type t isprivate ; en Ada) ; exemple : figure

    2

    , le type LISTE (lignes 10-12) ; le type est entirement cach (en Ada, dfini dans la section

    private de linterface, ou dans le corps du module) ; le type reoit,implicitement ou explicitement, lattribut PRIVATE ; exemple :figure

    2

    , le type MAILLON (lignes 5-8).

    Remarque

    : lquivalent des types Ada limited private nexistepas en Fortran 90 : laffectation reste toujours utilisable pour un typepriv ; mais le module peut la redfinir ( 5.5).

    6.3 Importation des ressourcesdun module

    Un module doit tre compil avant toute unit utilisatrice, ce quicre un fichier dcrivant linterface visible du module, gr auto-matiquement par le compilateur.

    Fortran 90 confond en une seule dclaration (USE) la foislimportation dun module (clause with en Ada), et la dclaration devisibilit (use en Ada).

    Lutilisation la plus simple (correspondant en Ada with m ;use m ;) est :

    USE nom_de_module

    qui importe le module, et donne accs toutes ses ressourcesvisibles sous leur nom dorigine, sauf en cas de conflit de nom ; on reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique

    ache. Toutefois, en Fortran 90, le moduleit de compilation : il ny a pas sparationon visible, et une partie implmentationtendu (interface et implmentation) oue body). Cela peut obliger recompiler

    rs qu spcification (et smantique)ion technique volue.

    ule Fortran na pas de partie optionnellebegin do en Pascal tendu, squence

    es et prives

    dfinie dans un module est exporte,r du module. Cela correspond lattributlent dexport en Pascal tendu) ; il fautATE toute entit (type, objet ou proc-rser cette situation en introduisant une

    PRIVATE

    rer toute entit exporte avec lattribut

    cartsiens, il existe trois possibilits,

    peut nanmoins accder de telles entits en les renommant, lamanire de Pascal tendu.

    Ce mme procd est employer si lon recourt deux modulesexportant deux entits distinctes homonymes que lon souhaiteutiliser. Le mlange with / use est compens en Fortran par la pos-sibilit de limiter laccessibilit aux entits visibles dun module,toujours comme en Pascal tendu, laide dune clause ONLY.

    La premire dclaration USE permet daccder au module sans enrien importer ; on peut linclure en tte de lunit importatrice pourdes raisons de lisibilit. Si la procdure P est lutilisatrice effectivedu module, la seconde dclaration USE lui donne toute la visibilitrequise.

    ExempleUSE Liste_d_Entiers, INT_LISTE => LISTE, L_EMPTY &

    => L_VIDEbaptise localement INT_LISTE et L_EMPTY les entits associes dumodule.

    ExempleUSE Liste_d_Entiers, ONLY : ! quivalent dun with Ada............................CONTAINS

    SUBROUTINE PUSE Liste_d_Entiers ! quivalent dun use Ada.

  • ____________________________________________________________________________________________________________________________ FORTRAN

    Toute reproduction sans a

    Plus gnralement, en particulier pour des modules de type biblio-thque, on peut restreindre la liste des entits importes, ventuel-lement en les renommant.

    La relation dimportation est transitive : un module M2 importantune entit dun module M1 peut la rexporter librement. On peutlimiter cette rexportation en rendant PRIVATE dans M2 les nomslocaux des entits importes.

    7. Entres-sorties

    7.1 Fichiers

    Paradoxalement, Fortran, langage scientifipose dune assez belle panoplie doutils pouencore enrichie par la rcente norme.

    On distingue deux types de fichiers secontenu :

    les fichiers de texte, dont les enregistremcontiennent exclusivement des suites de caratext en Pascal ; offerts par le paquetage prcrs sous le contrle dun format ddition stream en PL /1) ;

    les fichiers binaires, dont les enregistrde valeurs quelconques (ou fichiers sans fo

    Deux mthodes daccs aux enregistremeFortran :

    squentielle (offerte en Ada par lesquential_io pour les fichiers binaires ; cePascal ISO) ;

    directe par le rang (paquetage direct_io binaires ; type file [....]of.... en Pascal tendu

    Sur certains systmes, les fichiers engueur fixe peuvent admettre les deux mth

    En Fortran, tout fichier peut tre trait enlecture seulement, ou en modification ; cest u(ACTION =) de linstruction OPEN ( 7.2) qupossible. En accs squentiel, on peut auexistant (grce au paramtre POSITION =OPEN).

    Dans un programme Fortran, un fichier estdunit logique, qui est un entier positif ou ndu fichier. Si le fichier est rmanent, il est cun nom externe dfinissable et accessible e

    Il existe deux units prdfinies, dnotes *en PL /1, input en Pascal, standard_input en A(sysprint en PL /1, output en Pascal, standamode dexcution dialogu, toutes deux corde lutilisateur ; elles dsignent toujoursquentiel.

    7.2 Ordres gnraux

    On peut interroger le systme sur un fichier connu par son nom,ou par son numro dunit logique (ul), grce linstruction :

    INQUIRE (f, liste des paramtres rsultats)

    o f est FILE = nom ou UNIT = ul.

    Les paramtres permettent dobtenir une information sur lexis-tence de f (EXIST =), sur les permissions accordes par le systme(SEQUENTIAL, DIRECT, (UN)FORMATTED), sur les caractristiquesde lexploitation en cours (OPENED, RECL, ACCESS, FORM, READ,WRITE, READWRITE et ACTION), sur le nom externe (NAMED,NAME) ou le numro dunit logique (NUMBER), plus quelques para-mtres spcifiques (BLANK, DELIM, PAD pour les fichiers de texte ;NEXTREC pour un fichier direct ; POSITION pour un fichiersquentiel).

    Remarque : certains de ces paramtres correspondent des fonc-tions prdfinies en Ada (OPENED = correspond is-open,ACTION = correspond mode, NAME = correspond fonction demme nom) et en Pascal tendu (NEXTREC correspond position).

    ExempleMODULE M

    PRIVATEPUBLIC:: A, B, C, D

    ..................................PROGRAM principal

    USE M, ONLY : B, VLOC => Animporte que B (sous son nom), et A renomm localement VLOC.utorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique H 2 120 13

    que par excellence, dis-r manipuler les fichiers,

    lon la forme de leur

    ents (ou composants)ctres (fichiers de typedfini text_io en Ada ;en Fortran, et en mode

    ements sont des suitesrmat).

    nts sont disponibles en

    paquetage prdfinist la seule possible en

    en Ada pour les fichiers).

    registrements de lon-odes.

    criture seulement, enn paramtre spcifique

    i dtermine lutilisationssi allonger un fichier append de lordre

    dsign par un numroul, choisi louverture

    onnu du systme sousn Fortran.

    ; lune en lecture (sysinda), lautre en criture

    rd_output en Ada). Enrespondent au terminals un fichier de texte

    Fortran 90 introduit une nouvelle forme de cette instruction :

    INQUIRE (IOLENGTH = variable entire) liste de variables

    o la liste dcrit la structure des enregistrements dun fichierbinaire ; la variable reoit alors la longueur interne des enregis-trements associs (valeur utilisable ensuite pour le paramtre RECLde linstruction OPEN).

    Les units prdfinies (*) sont accessibles sans formalit ds ledbut du programme. Les autres fichiers doivent tre ouvertsavant leur utilisation et associs un numro dunit logique parune instruction :

    OPEN ([UNIT =] ul, liste de paramtres dentre)

    Les paramtres dfinissent diverses caractristiques gnrales dufichier (FILE, STATUS, FORM, ACCESS, RECL, POSITION, ACTION),et prcisent certaines options spcifiques pour les fichiers de texte(BLANK, PAD, DELIM).

    Remarque : en accs squentiel :

    OPEN (ul, POSITION = rewind, ACTION = write [,....])

    correspond la procdure prdfinie rewrite en Pascal ; la proc-dure reset correspond ACTION = read.

    Une fois le traitement du fichier termin, il est recommand dele fermer par linstruction :

    CLOSE ([UNIT =] ul [, STATUS = action prendre])

    qui correspond aux procdures close ou delete en Ada (selon lavaleur de STATUS).

    Remarque : toutes les instructions dentre-sortie Fortranpeuvent en outre comporter les paramtres suivants :

    ERR = tiquette de transfert en cas derreur ;IOSTAT = variable scalaire entire (= 0, 0 en cas derreur), dontla logique correspond celle de STAT pour les instructionsALLOCATE / DEALLOCATE ( 4.2.5).

    7.3 Instructions de lecture-criture

    Les instructions ci-aprs portent sur un fichier dsign par unnumro dunit logique. Lcriture dun nouvel enregistrement seralise par linstruction :

    WRITE (liste de commande) [Liste de donnes]

  • FORTRAN _____________________________________________________________________________________________________________________________

    TouteH 2 120 14

    et la lecture dun enregistrement par :

    READ (liste de commande) [liste de variables]

    En Fortran, les listes dentre-sortie (donnes ou variables) necorrespondent pas ncessairement un objet structure uniquecomme dans la plupart des langages, mme si leur introduction enFortran 90 doit en gnraliser lemploi dans ce contexte.

    Les listes de commande sont de la forme :

    [UNIT =] ul [, options]

    o les options possibles sont en particulier :END = tiquette pour grer la fin du fichier en lecture squentielle ;REC = expression pour les fichiers directs (paramtres from et to

    en Ada).

    Dautres options sont spcifiques aux fichiers de texte ( 7.4).

    En accs squentiel, on dispose encore de linstruction :

    REWIND ([UNIT =] ul)

    pour replacer un fichier son dbut (effet quivalent au paramtrePOSITION = rewind de lordre OPEN).

    Il existe en outre deux instructions techniquement obsoltes :ENDFILE (ul) et BACKSPACE (ul).

    7.4 Fichiers de te

    Ils sont dfinis au paragrla correspondance entre lesles caractres qui les repr

    par un format dditioordres get /put en PL /1) ;

    par liste, ou en forma par noms de donnes

    De plus, contrairement auordre READ ou WRITE p(appels lignes dans le cas

    Pour les units prdfinordres READ / WRITE avec

    READ format [, Liste

    PRINT format [, Liste

    7.4.1 dition avec fo

    Les instructions READ commande loption :

    [

    et, optionnellement :

    ADVANCE = et, en le

    Remarque : loption ADVquivalent aux procdures elle, les ordres Fortran REArespectivement).

    Lindication de format es(figure 1, ligne 59), ou une dont la valeur est de la for(flist), o flist est une lis

    [r] ed o ed est unou /

    ned o ned est u(tous au

    [r] (flist)r : facteur de rptition (constante entire > 0).

    Le principe est de faire correspondre, chaque donne dite, unmodle ddition de donne adapt son type, et dcrire la miseen place des champs dits laide de modles auxiliaires.

    Liste des modles ddition de donnes Remarque : w dsigne le nombre de caractres du champ dit

    sur la ligne ;d : nombre de chiffres de la partie fractionnaire ;e : nombre de chiffres de lexposant ;m : nombre minimal de chiffres afficher ;s : nombre de chiffres significatifs ;

    pour un entier : lw, Bw, Ow, Zw, et leurs variantes lw.m, etc ensortie (pour les bases de numration respectivement 10, 2, 8 et 16),

    pour un rel : Fw.d, Ew.d [E.e], Dw.d, ENw.d [E.e], ESw.d [E.e] ;en lecture, tous sont quivalents ; en sortie, ils permettent dobtenirdiverses variantes de prsentation,

    pour une chane de caractres : Aw (avec en sortie troncatureou compltion par des espaces de la valeur dite),

    pour une valeur logique : Lw (T / F reprsentent les valeurslogiques),

    pour tous types : Gw.s [E.e] o seul w est utilis en dehors dutype rel. reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique

    xte

    aphe 7.1. Il existe trois faons de diriger donnes du programme transfres, etsentent dans les enregistrements :n explicite (quivalent au mode edit des

    t libre (dnot * ; mode list en PL /1) ; (NAMELIST ; mode data du PL /1).

    x fichiers binaires, lexcution dun seuleut traiter plusieurs enregistrements des fichiers de texte) successifs.

    ies, il existe des formes abrges des format explicite ou libre :

    de variables]

    de donnes]! figure 1, lignes 53-58.

    rmat explicite

    / WRITE utilisent dans leur liste de

    FMT =] format

    cture seulement : SIZE = et EOR =

    ANCE = no permet dobtenir un effetprdfinies read et write de Pascal (sansD / WRITE quivalent readln et writeln

    t ltiquette dune instruction FORMATexpression de type chane de caractresme :te dlments de la forme : modle ddition de donne (rptable)

    n modle non rptabletres modles ddition) ;

    Une valeur complexe est transmise laide de deux modles rels ;une structure, laide dautant de modles que de champs scalaires.

    Modles prcisant ldition numriqueBN, BZ interprtation des espaces non initiaux en lecture ;S, SS, SP traitement du signe + en sortie ;kP facteur dchelle (k constante entire).

    Rgles gnrales pour ldition numrique En lecture, les espaces initiaux ne sont pas significatifs. Linter-

    prtation des autres espaces est dirige par le contrle despace envigueur (cf. BLANK =, BN, BZ).

    la lecture dun rel, un point dcimal dans le champ lu sup-plante lindication du modle.

    En sortie, la reprsentation est cadre droite. Si la valeur trans-mise est trop grande pour tre reprsentable selon le modle, le pro-cesseur produit un champ de w astrisques.

    Modles de positionnement des champsLa transmission du prochain caractre vers ou depuis la ligne

    courante soprera partir du caractre :Tc de rang c sur la ligne ;TLc situ c positions avant la position courante ;TRc ou cX situ c positions aprs la position courante.

    Autres modleslibell en sortie ; transmis tel quel (figure 1, ligne 59) ;/ provoque la fin du traitement de la ligne courante ;: arrte lexploration du format aprs puisement des

    donnes.

    7.4.2 dition en format libre

    Elle libre lutilisateur de toute obligation de cadrage des champsen lecture, et des lourdes laborations de format en sortie. Lindi-cation de format est alors remplace par * .

    Chaque ordre dentre-sortie traite un ensemble de caractresplacs sur une ou plusieurs lignes, et formant une suite de valeurs :constante ou valeur vide (le cas chant rpte par un facteur de

  • ____________________________________________________________________________________________________________________________ FORTRAN

    Toute reproduction sans a

    rptition r*), spares par une virgule ou un espace et, en entre,termines le cas chant par /

    7.4.3 dition dirige par noms

    Poursuivant des buts voisins du format libre, ce mode dditionvise accrotre la lisibilit des donnes sur le support externe. Mal-heureusement, il rompt lindpendance donnes-programme. Leprincipe consiste associer chaque type darticle logique dufichier un nom de liste gnrique, quivalent un nom de struc-ture, dont les champs sont dfinis par une dclaration :

    NAMELIST / nom darticle / liste des noms des champs

    Dans le fichier, les donnes relatives un article logiquecommencent par & nom de larticle, et se terminent par /. Les valeursdes divers champs sont indiques sous forme daffectationsspares par des virgules.

    Les instructions dentre-sortie prennent la forme :READ ([UNIT =] ul, [NML =] nomWRITE ([UNIT =] ul, [NML = ] nom

    avec toujours les options facultatives ERR lecture.

    7.4.4 Fichiers internes

    Fortran permet de considrer une c((sous-)objet variable) comme un pseudo-fichet un (sous-)tableau de chanes comme un filignes que dlments dans le tableau. Un fichtrait avec format explicite.

    8. Liste des procduprdfinies

    Ces procdures font partie intgrante de laet sont donc disponibles sur tous les compigralement la norme. Du point de vue de leur tingue quatre sortes de procdures prdfin

    Les procdures distributives, oprant surscalaires, mais applicables des tableaux ; alors un tableau de mme profil, rsultant fonction aux lments du ou des arguments

    Les fonctions attributs, ou dinterrogation, qui fournissent uneproprit de leur argument principal indpendamment de sa valeur(qui peut mme tre indtermine) ; elles correspondent en Ada auconcept dattribut.

    Les fonctions de transformation : toutes les autres fonctions ;elles portent gnralement sur des tableaux.

    Les sous-programmes non distributifs.Linterface dune procdure prdfinie est toujours visible, ce qui

    permet les deux formes dappel ( 5.3), et autorise la prsence deparamtres optionnels ; lorsquils sont mentionns, ils apparaissentici en lettres minuscules.

    Remarque : lorsquune procdure prdfinie est transmise enargument (ce qui est possible en Fortran, contrairement Pascal), laprocdure dappel doit la dclarer INTRINSIC.

    8.1 Fonctions distributives

    Exemple de ligne en entre (remarque : 2* rpte la valeur vide) :

    Bonjour 50 * 1.5 (2.5E3, 3.14) 2* ,1 3

    ExempleDIMENSION A (9) ; CHARACTER * 20 TENAMELIST / ARTICLE / TEXTE , Z , AREAD (* , NML = ARTICLE)

    peut lire les lignes suivantes :&ARTICLE TEXTE = EXEMPLE, Z = (0

    A (1) = 47, A (4:8) = 5 * 0.6 /

    ExempleCHARACTER (12) : : TEWRITE (TEXTE , 10) SO

    10 FORMAT (F12.2, TL3 ,

    Exemple : ABS (( / 3 , 2 , 7 /)) donne le v

    ExempleINTRINSIC COSCALL CALCUL (COS, ....)utorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique H 2 120 15

    darticle) darticle)

    / IOSTAT, et END = en

    hane de caractresier interne dune ligne,

    chier form dautant deier interne est toujours

    res

    dfinition du langage,lateurs respectant int-mode de calcul, on dis-ies en Fortran 90.

    des arguments a prioriles fonctions renvoientde la distribution de la.

    8.1.1 Fonctions de conversion

    Ces fonctions ont toutes un paramtre optionnel KIND, prcisantle sous-type du rsultat. Ce sont : INT, REAL (plus larchaque DBLE),CMPLX (X, y), LOGICAL.

    8.1.2 Fonctions arithmtiques

    Elles admettent des arguments dun type numrique quelconque,le rsultat tant du mme type. Ce sont :

    valeur absolue (ABS), arrondi (NINT et ANINT), troncature (AINT),reste et modulo (MOD et MODULO), extremums (MIN et MAX),transfert de signe (SIGN (A , B)), diffrence positive (DIM (X, Y)),conjugu (CONJG (Z)).

    Les fonctions suivantes oprent de plus une conversion de type :multiplication en double prcision (DPROD), partie entire (FLOORet CEILING), partie imaginaire (AIMAG (Z)).

    8.1.3 Fonctions mathmatiques

    un rangement rel ou complexe ; ce sont : racine carre (SQRT),exponentielle (EXP), logarithmes (LOG, LOG10), fonctions circulaires(COS, SIN, TAN) et leurs inverses (ACOS, ASIN, ATAN et sa varianteATAN2 (Y, X)), fonctions hyperboliques (COSH, SINH, TANH).

    8.1.4 Fonctions relatives aux chanes de caractres

    Comparaisons ASCII (LLT, LLE, LGE, LGT), conversion code caractre (CHAR et ICHAR, et leurs quivalents ASCII : ACHAR etIACHAR), localisation dune sous-chane (INDEX), justification(ADJUSTL et ADJUSTR), longueur hors espaces finaux (LEN_TRIM),contrle par rapport un alphabet (SCAN et VERIFY).

    8.1.5 Fonctions de traitement des rels

    Accs aux composantes du modle (FRACTION, EXPONENT et sarciproque SET_EXPONENT), et quelques fonctions trs spcialises(NEAREST, SCALE, SPACING, RRSPACING).

    XTE ; COMPLEX Z

    , 2),

    XTEMME

    ,)

    ecteur ( / 3, 2 , 7 /)

  • FORTRAN _____________________________________________________________________________________________________________________________

    TouteH 2 120 16

    Remarque : SPACING (X) donne la valeur absolue du dernier bit dela reprsentation de X, et permet par exemple de mettre en uvre lamthode de perturbation et permutation de Vignes.

    8.1.6 Fonctions de traitement du bit( arguments entiers)

    Oprations logique bit bit (NOT, IAND, IOR, IEOR), dcalages(absolu ISHFT, circulaire ISHFTC), accs au bit (BTEST et ses rci-proques IBSET et IBCLR, IBITS).

    8.1.7 Fonction de dfinition conditionnelle

    MERGE (TSOURCE, FSOURCE, MASK)

    Pour des tableaux, les fusionne sous le contrle de MASK (detype logique) (cf. loprateur ? en C).

    8.2 Fonctions-attributs

    8.2.1 Fonctions gnrales

    KIND (X) : paramtre de type de lobjet X.ASSOCIATED (POINTER, target) : test dassociation dun pointeur(quivaut la comparaison de pointeurs dans les autres langages).PRESENT (A) : test de prsence dun argument optionnel.LEN (STRING) : longueur physique de la chane argument.

    8.2.2 Caractristiques des types numriques

    ExternesEPSILON, PRECISION, H

    RANGE (rciproque de r da

    InternesBIT_SIZE pour un entier, M

    un rel et, pour les deuxsignificatifs ; attribut de m

    8.2.3 Fonctions relat

    ALLOCATED (ARRAY) tesALL

    LBOUND (ARRAY, dim) et Ubor

    SHAPE (SOURCE) donSIZE (ARRAY, dim) don

    abs

    8.3 Fonctions de transformation

    8.3.1 Fonctions sur tableaux

    Un certain nombre de ces fonctions ont un paramtre optionnel :

    DIM (entier scalaire) spcifiant une dimension(

    MASK (logique) filtre dapplication de la fonction.

    Application dune opration aux lments dun tableauMINVAL et MAXVAL lments extrmes ;

    avec dans le mme ordre dide (figure 1, ligne 23) :MINLOC et MAXLOC position des lments extrmes.SUM et PRODUCT somme et produit des lments.ANY et ALL somme et produit logique des lments

    (idem en PL /1).COUNT nombre dlments vrai dans un tableau

    logique.

    Fonctions de calcul matricielDOT_PRODUCT produit scalaire.MATMUL produit matriciel.TRANSPOSE transpose dune matrice.

    Autres fonctionsRESHAPE fonction de restructuration

    (figure 1, lignes 26-29).PACK construit un vecteur dlments

    (figure 1, lignes 26-27).UNPACK fonction inverse de PACK.SPREAD construit un tableau par duplication dun

    autre.EOSHIFT, CSHIFT dcalages (avec expulsion, ou circulaire).

    1 dim rang du tableau argument). reproduction sans autorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique

    UGE (+), TINY (plus petit rel > 0),ns une fonction SELECTED_t_KIND).

    INEXPONENT et MAXEXPONENT pour types : DIGITS (nombre de chiffresme nom en Ada), et RADIX.

    ives aux tableaux

    t dexistence dun tableauOCATABLE ( 2.3).BOND (ARRAY, dim)

    nes du tableau.ne le profil de son argument.ne une tendue (la taille si dim estent) du tableau.

    8.3.2 Fonctions gnrales

    SELECTED_INT_KIND (R) et SELECTED_REAL_KIND (p, r) voir 2.1.

    REPEAT (STRING, NCOPIES) duplication de la chane STRINGTRIM (STRING) chane STRING moins ses espaces finaux.TRANSFER transfert de type

    (cf. unckecked_conversion en Ada.)

    8.4 Sous-programmes prdfinis

    RANDOM_SEED initialise ou interroge le gnrateurpseudo-alatoire.

    RANDOM_NUMBER fournit un (tableau de) rel(s)pseudo-alatoire(s).

    DATE_AND_TIME fournit la date et lheure (figure 1,ligne 52).

    SYSTEM_CLOCK consultation de lhorloge interne.MVBITS transfert de bits entre entiers (procdure

    distributive).

  • ____________________________________________________________________________________________________________________________ FORTRAN

    Toute reproduction sans a

    9. Conclusion

    Fortran vient de soffrir une vritable rvolution culturelle, au bonsens du terme, Des constructions saines et rigoureuses, accroissantle pouvoir dexpression du langage et amliorant la fiabilit desprogrammes, sont venues balayer un certain nombre de conceptionsarchaques. Fortran sort ainsi renforc dans son domaine deprdilection : le calcul intensif, tout en rejoignant enfin ! lesproccupations du gnie logiciel. Toutefois, cette modernisationpousse a d conserver les caractristiques obsolescentes deFortran 77, pour dvidents motifs de rutilisation du code existant :cela entrane la co-existence actuelle de deux styles dcritureantinomiques, alourdissant considrablement les compilateurs jusquau niveau de lanalyse lexicale ! De mme, si le professionnelde la programmation ne peut quaccueillir avec faveur le rajeunis-

    sements de son langage de prdilection, le scientifique ou letechnicien, utilisateur occasionnel, pourra rester perplexe devant sacomplexification apparente : sensibilisation et formation doiventtre les rponses leur apporter.

    Nous lavons dit ds lintroduction, Fortran 90 nest quune tapedans un processus de progrs dsormais irrversible. Dores et djlavenir se prpare lhorizon 2000 est pour demain et des groupesdexperts sont actuellement au travail pour enrichir encore Fortran :le domaine du temps rel (Fortran Haute Performance ), celui dela programmation par objets sont des voies intensivementexplores, ct dautres amliorations importantes comme la ges-tion des exceptions.

    Reprenant la conclusion de la version prcdente de cet article,il est plus que jamais permis dajouter : les dveloppements quenous venons de mentionner font penser que Fortran connatraencore de beaux jours au XXIe sicle. utorisation du Centre franais dexploitation du droit de copie est strictement interdite. Techniques de lIngnieur, trait Informatique H 2 120 17

  • Do

    c. H

    2 1

    20

    12 -

    199

    3

    Toute reproductioest strictem

    POUR

    EN

    SAV

    Fortran

    par Patrice LIGNELETcole Nationale Suprieure dlectronique et de ses Applications (ENSEA)(division des Administrateurs)Animateur du groupe Fortran lAFNOR

    Caractristiques obsolescentesLa norme indique comme telles des caractristiques de Fortran 77 sexpri-

    mant de meilleure faon en Fortran 90, et voues une probable disparitionds la prochaine norme. Tout compilateur doit en signaler lemploi dans un pro-gramme. Elles comprennent des caractristiques dj obsolescentes de fait enFortran 77 (le descripteur Hollerith nH, linstruction PAFORMAT dfinies par ASSIGN), de douteux apports deparamtres de boucles rels !, branchement vers ENDIFIF), danciennes caractristiques rendues obsolconstructions : IF arithmtique ternaire (utiliser un CASun schma IF pour les rels), boucles DO embotes fininstruction excutable (utiliser un END DO propre chet GOTO assign (utiliser une procdure interne), ettristiques officiellement normalises par Fortran 77 (pquette (*) et retour ventil, remplacer par un code de ret

    Beaucoup dautres constructions, bien que non dcompte tenu de leur taux demploi lev, le sont deven

    le format fixe de texte source avec zonage rigide (et espaces nonsignificatifs) ;

    les zones communes (COMMON) et (BLOCK DATA) associs,remplaces chacune par un module ;

    NorComme pour Ada, le module permet dsormais d

    alourdir sa grammaire. Divers services logiciels spcialofferts au programmeur Fortran, laide de module lesdune norme auxiliaire supplmentaire rattache lalangage.

    Un type chane de caractres de longueur variable (cest en voie dadoption. Le module sappelle ISO_VARYINle type abstrait VARYING_STRING, et lunifie avec le tmanire de Pascal tendu). Cest ainsi que toutes les oapplicables au type CHARACTER le deviennent au n

    DLhtrognit et la complexit croissantes du langa

    grands constructeurs acclrer la commercialisatnont-ils pas souvent introduit dans leur implmentationnombre dextensions recoupant quelques unes des caramais avec une syntaxe divergente ? Devant cette carencfournisseurs spcialiss, plus dynamiques, ont su prendfaire appel :

    NAG (Numerical Algorithms Group, Oxford), quFortran 90 (f90) sur :

    DEC station 3100, HP9000 / 700, IBM Risc system /6000, 4D, SUN 3 et 4 Unix 4.2 bsd, Apollo Domain : F90 verdisponible sur HP9000 /400 et VAX /VMS).

    Ces compilateurs, crits en C, oprent en plusiepremiers traduisent le code Fortran 90 en C.

    Ils sont commercialiss, hors maintenance, des pri 12 000 F (mars 1993). noter lexistence dune versioseur INTEL 386 SX ou +, propose 990 FH.T.

    Salford Software offre un compilateur de mme nboration avec NAG) pour PC systmes DOS ou UNSoftware Marketing Ltd., Maxwell Building, The CresGrande-Bretagne).n sans autorisation du Centre franais dexploitation du droit de copieent interdite. Techniques de lIngnieur, trait Informatique Doc. H 2 120 1

    OIR

    PLUS

    USE, les tiquettes de Fortran 77 (indices ou depuis lextrieur duntes par de nouvelles

    E pour les entiers, ou commune, ou sur uneaque boucle), ASSIGN mme certaines carac-aramtres de type ti-our test par un CASE).

    clares obsolescentesues de fait :

    lassociation de mmoire (EQUIVALENCE), remplace par les pointeurset les cibles (TARGET) ;

    les paramtres tableaux borne implicite : utiliser un profil hrit ; les points dentre secondaire (ENTRY) : utiliser un MODULE avec

    autant de procdures distinctes ; le GOTO de ventilation, remplac par le CASE ; les noms spcifiques des fonctions prdfinies gnriques (dj

    osboltes en Fortran 77) ; et la nouvelle directive INCLUDE, dj rendue inutile par les modules,

    qui oprent linclusion au niveau smantique.

    mes auxiliaires supplmentairestendre le langage sansiss pourront ainsi tre faisant chacun lobjet norme principale du

    har (n) varying en PL /1G_STRING ; il exporte

    ype CHARACTER ( laprations ou fonctionsouveau type, voire en

    mlangeant les deux types le cas chant. Des procdures spcifiques sontajoutes :

    VAR_STR (CHAR) pour convertir explicitement largument CHARacteren VARYING_STRING ;

    GET, PUT et PUT_LINE pour les entres-sorties du nouveau type ; enfin, INSERT, REPLACE, REMOVE, EXTRACT et SPLIT pour manipuler

    le contenu dune chane variable.

    Dautres projets sont en crous dtude pour raliser des passerelles entreFortran et des normes relatives dautres domaines (le traitement graphique,le langage daccs aux bases de donnes SQL, le systme dexploitationPOSIX, etc.)

    isponibilit des compilateursge nincitent gure les

    ion de compilateurs ; de Fortran 77 un certainctristiques nouvelles,e provisoire, quelquesre le relai. On peut ainsi

    i offre un compilateur

    NeXT, Silicon Graphicssion 2 (la version 1 est

    urs passes, dont les

    x hors taxes de 5 940 Fn de base pour proces-

    ature (ralis en colla-IX (FTN 90). (Salford

    cent, Salford M5 4WT,

    Pacific-Sierra Research diffuse le produit VAST-90, qui traduit le codeFortran 90 en Fortran 77 de lancienne norme (qui peut ensuite tre pris en chargepar un compilateur Fortran 77, avec une bibliothque complmentaire pourcertaines procdures prdfinies). Ce mme produit peut rcrire en Fortran 90du code Fortran 77 existant. (Pacific-Sierra Research Corp., Computer ProductsGroup, 12340 Santa Monica Belvedere, Los Angeles, CA 90025).

    La socit amricaine PARASOFT diffuse un autre traducteur deFortran 90 en Fortran 77 (Parasoft Corp., 2500 E, Foothill Belweder Pasadona,CA 91107).

    Autres compilateurs : Microway (pour systme DOS, OS /2 et Unix) ; EPCpour Sparc Solaris 1.x et 2.x, IBM RS /6000, Intel 3 /486 (SVR 384, Solaris 2.x),Motorola 88000 /100/100 (SVR 384).

    Un compilateur maison pour IBP 9000 vient dtre install chez certainsclients privilgis. On annonce encore un compilateur chez Hewlett-Packard,chez SUN (partiellement construit partir du compilateur NAG), chez DigitalEquipement (DEC), chez CRAY (CF90, version Sparc), Microsoft, Lahey,Portland, ACRI (pour machine Alpha)...

  • FORTRAN _____________________________________________________________________________________________________________________________POUR

    EN

    SAVOIR

    PLUS

    Toute reproduction sans autorisDoc. H 2 120 2 est strictement interdite.

    BibliographieABERTI (C.). Fortran 90. Initiation partir du

    Fortran 77 . Srie Informatique, SI ditions,Menton (1992).

    BRAINERD (W.S.), GOLDBERG (C.H.) et ADAMS(J.C.). Programmers Guide to Fortran 90 .McGraw-Hill, New-York (1991).

    BRAINERD (W.S.) et alii. The Fortran90 Hand-book . Unicomp (1992).

    COUNIHAN. Fortran 90 . Pitman (1991).DELANNOY (C.). Programmer en Fortran 90 .

    Eyrolles (1993).

    DUBESSET (M.) et VIGNES (J.). Les spcificationsdu Fortran 90. Technip (1993).

    KERRIGAN (J.). Migrating to Fortran 90 . OReilly(1993).

    LIGNELET (P.). Fortran 90. Approche par laPratique . Srie Informatique, SI ditions,Menton (1993).

    LIGNELET (P.). Les fichiers en Fortran . Masson(1988).

    METCALF (M.) et REID (J.). Fortran 90 Explained .1990, Oxford Universty Press, Oxford. Ouvragetraduit en franais par PICHON (B.) et CAILLAT

    (M.) sous le titre Fortran 90 : les conceptsfondamentaux . AFNOR ditions (1993).

    METCALF (M.). A first Encounter with Fortran90 (using the NAG f90 compiler). Fortran Jour-nal, vol. 4, no 1, p. 2-8, janv.-fv. 1992.

    Cet article est extrait de la revue bimestrielleFORTRAN JOURNAL, The Journal of the FortranUser Community (P.O. Box 201, Fullerton, CA92634. En France, voir la socit OPTIMIZE : cf.Annexe 3).MORGAN et SCHONFELDER. Programming in

    Fortran 90 . Blackwell (1993).

    NormalisationNorme internationaleISO /IEC 1539 1991 Programming language Fortran. ISO /IEC 1539-2 [en voie dadoption]

    Varying Length Character Strings in Fortran.

    France (AFNOR)ISO /CEI 1539 Langage de programmation FORTRAN. (indice de

    classement Z 65-110) [ paratre]

    tats-Unis (ANSI)X 3.198 1992 Programming Language Fortran Extended.ation du Centre franais dexploitation du droit de copie Techniques de lIngnieur, trait Informatique

    Fortran1. Structure gnrale du langage1.1 Exemple de programme Fortran 901.2 Architecture des programmes1.3 Structure lexicale

    2. Types et oprateurs2.1 Types scalaires prdfinis2.2 Types structures (ou drivs)2.3 Tableaux2.4 Objets points

    3. Instructions de dclaration3.1 Typage des objets3.2 L