Cette page rassemble des infos sur l'introduction à fortran proposée par Claude, pour les tuteurs (séances qui ont eu lieu en février 2010). La première partie ne traite pas du langage lui-même, et est en partie spécifique à clipper et l'ENS. La deuxième partie est une introduction aux bases de fortran. Elle est loin de présenter tout fortran, le but est juste de donner des bases pour démarrer rapidement. Enfin, la dernière partie donne quelques indications sur où trouver de l'aide et/ou des compléments d'information.
Quand on écrit un programme, il est utile d'utiliser un éditeur de texte qui à partir de l'extension (.f ou .f90, .f95) comprend que le fichier est du fortran et donc met des couleurs selon ce qu'on écrit (lignes de commentaires qui ne seront pas lues par le compilateur, mots spéciaux (if, character, etc.), etc.). Emacs ou Vim sont des exemples de tels éditeurs. À l'ENS ils sont installés dans les salles d'info, et sont sinon téléchargeables sur internet.
Le compilateur installé dans les salles d'info à l'ENS est gfortran (documentation), qu'on peut aussi télécharger gratuitement. Il existe d'autres compilateurs.
Le compilateur prend le fichier en fortran comme entrée, et en sortie produit une exécutable. C'est ce fichier exécutable que l'on va exécuter quand on veut se servir du programme que l'on a écrit.
Procédure quand on est sur une machine d'une salle info à l'ENS :
Si vous étudiez à l'ENS et que vos programmes sont dans le cadre de vos études, vous avez le droit d'utiliser les machines des salles infos de l'ENS, mais lisez la suite.
Pour compiler et lancer le programme, il suffit de suivre la procédure décrite plus haut. Un fois fois le programme lancé, on peut le contrôler en utilisant top. Dans un terminal de l'ordinateur que vous utilisez, tapez "top" (+"entrée") ("q" pour quitter et revenir à la ligne de commande)
L'avantage de tout ça, c'est que ça peut se faire à distance, en se logguant sur clipper via ssh ("ssh monlogin@clipper.ens.fr" dans un terminal sur mac et unix/linux, en utilisant putty sous windows). Clipper n'est pas une machine de calcul : une fois sur clipper, faites un ssh vers une machine de salle info ("ssh nomdelamachine").
Sur cette page sont introduites les bases de fortran, pour démarrer rapidement. Il y a des liens vers des fichiers exemples. Le mieux, c'est de les copier, de les ouvrir dans votre éditeur de texte favori, de les compiler, et de lancer l'executable pour observer ce que le programme fait. Et encore plus instructif, essayer des modifications et leurs effets.
L'histoire de fortran commence dans les années 50. Le standard de fortran 77 (qui date de l'année 1977) a été longtemps la norme, mais de grandes avancées ont été faites avec la version du début des années 90 (fortran 90/95 : 95 améliore marginalement le 90). En particulier, beaucoup de contraintes sur le format d'écriture ont été relâchées (par exemple le nombre maximum de caractères par ligne, la signification des premiers caractères de chaque ligne). La compatibilité est assurée : on peut utiliser du code écrit en 77. Mais je traite de fortran 90/95 ici, et donc il faut mettre des extensions aux fichiers de type .f90 ou .f95 pour que le compilateur sache qu'il a affaire à du fortran 90/95.
Pour chaque instruction, il faut une nouvelle ligne. ";" est équivalent à revenir à la ligne. "&" permet de continuer une intruction sur une nouvelle ligne. Il ne faut pas trop abuser de ces deux possibilités. Tout ce qui est sur une ligne après "!" est du commentaire, c'est-à-dire du texte qui ne sera pas lu par le compilateur. C'est très utile de mettre des commentaires. Pour que le programme soit plus facile à lire, c'est mieux aussi de donner aux variables des noms qui ont du sens. Petite remarque : fortran n'est pas sensible à la casse, c'est-à-dire que "nom", "NOM", "Nom, "nOm" sont équivalents pour fortran.
Pour illustrer ces règles de lisibilité, essayez de lire ce mauvais et ce bon exemple Le programme fait la même chose, mais dans un cas c'est plus facile à comprendre que l'autre.
Si on veut déclarer quelque chose et être sûr que sa valeur ne change pas pendant le programme, on peut ajouter "parameter" dans la déclaration : "integer, parameter :: nmax=50" par exemple.
Un premier type de variables sont les caractères ou les chaînes de caractères. Il faut déclarer quelle est leur taille maximum. Exemple.
D'autres variables : integer, real, double precision. Les entiers sont limités : si ils sont codés en 16 bits (ça dépend de la machine), ils peuvent aller de -32 768 à +32 767 (avec 32 bits, plus). Les real et les double precision servent à représenter les réels. Les real ont 6 chiffres significatifs, les double precision en ont plus.
On peut leur appliquer les opérations arithmétiques de base. Attention, si il n'y a que des entiers, le résultat sera entier, même pour une division.
Des fonctions intrinsèques existent pour les fonctions mathématiques usuelles (comme les fonctions trigonométriques, les exponentielles, etc.)
Les complexes existent aussi en fortran : ils sont représentés comme une paire de deux real.
Une variable logique est vraie ("True" ou "T"), ou fausse ("False" ou "F"). Comme on va le voir, on s'en sert pour appliquer des instructions sous certaines conditions.
On peut par exemple voir si "a est plus grand que b" est vrai ou faux : comparaisons
On peut aussi combiner plusieurs de ces conditions, avec des ou/et/etc..
La boucle do permet de répéter une action.
La boucle while permet de répéter une action tant qu'une certaine condition est vraie.
Avec cette boucle,
les actions dépendent de si une condition est vraie ou pas :
"if (A) then ;B; else C; endif" : si A est vraie, alors c'est
l'action B, sinon c'est l'action C.
Si on veut faire quelque chose du type : si C1 est vrai alors A1,
si C1 est faux mais C2 est vrai alors A2, si C1 et C2 sont faux alors
A3, on peut l'écrire de deux manières :
if (C1) then
A1
else
if (C2) then
A2
else
A3
endif
endif
Autre manière d'écrire :
if (C1) then
A1
else if (C2) then
A2
else
A3
endif
Utiliser des tableaux est très facile avec fortran. Les tableaux peuvent être des tableaux de caractères, d'entiers, de flottants, etc. Ils peuvent avoir jusqu'à 7 dimensions.
Avec alocatable/allocate, l'allocation est dynamique : la taille du tableau peut être décidée en cours de route. Éventuellement, si on veut libérer de la mémoire quand on n'a plus besoin d'un tableau, on peut utiliser deallocate.
Quand on utilise une opération sur un tableau, on applique en fait cette opération à chaque case du tableau. Notamment, par exemple si A et B sont des tableaux à deux dimensions, si on fait A*B, on ne fait pas le produit matriciel (une autre commande existe pour ça), mais on crée le tableau pour laquelle la case i,j est le produit de A(i,j)*B(i,j).
Exemple. Quand on ouvre un fichier, on lui donne un numéro. Quand on lit, on utilise "read(numéro de fichier,format)", et quand on écrit, on utilise "write(numéro de fichier,format)". Si on utilise "*" à la place du numéro de fichier, ce qui sera lu ou écrit le sera dans le terminal. La deuxième chose est le format, "*" par défaut. Si on le souhaite, on peut par exemple définir le nombre de chiffres écrits pour un real.
Pour alléger le programme principal, ou quand des parties se répètent, on peut définir des fonctions (qui retournent seulement une valeur) et des subroutines (où il y a toutes les instructions possibles).
Ces fonctions et sous-routines sont soit mises à la fin du fichier contenant le programme principal, soit sur des fichiers séparés : compiler ce fichier est évalent à compiler ces deux fichiers.
Fortran posséde une fonction intrinsèque pour générer des nombres pseudo-aléatoires entre 0 et 1. Exemples : (en suivant la doc de gfortran) : avec initialisation manuelle, ou en utilisant l' heure). Ce générateur dépend du compilateur, et peut aussi dépendre de la machine. Les nombres produits ne sont pas vraiment aléatoires. Selon les simulations qu'on fait, on peut avoir besoin de nombres pseudo-aléatoires plus ou moins "bons". Attention : le générateur de base peut-être insuffisant pour certaines applications. Sur les générateurs de nombres pseudo-aléatoires et sur comment transformer une distribution uniforme entre 0 et 1 en la distribution voulue (gaussienne par exmeple), voir la partie 2.7 du cours de P.Viot.
La meilleure façon de progresser est d'essayer de programmer quelque chose. Comme ici il n'y a que les bases, vous pouvez avoir besoin de chercher de l'aide et des compléments ailleurs.
Le forum des élèves (et anciens) de l'ENS (version web) a un conti ens.forum.informatique.lang.fortran où peuvent être posées des questions sur la programmation en fortran.
dernière modification : 7 mars 2010
Si vous avez un commentaire, un suggestion d'amélioration ou
toute autre question, contactez-moi : loverdo (arobase) phare (point)
normalesup (point) org