Académique Documents
Professionnel Documents
Culture Documents
1) Connectez-vous :
Connexion Sorbonne U avec le login et le mot de passe annuaire
2) Allez dans le gestionnaire de fichiers (dossier jaune en bas de l’écran)
puis aller dans Ce PC, Windows (C:), puis msys64
3) Lancez l’appli mingw64, un terminal s’ouvre…
4) Tapez la commande cd pour vous positionner dans le répertoire
d’accueil (ce dossier correspond au dossier Documents de Windows)
FORTRAN
90
●
FORmula TRANslator
(IBM, 1954-1957)… ●
Langage fortement
modernisé
FORTRAN 66 (IV) ●
Relativement simple et
puissant
FORTRAN 77 (V)
●
Très bien adapté à la
Format libre,
allocation dyn.
mécanique (en particulier la
de mémoire, manipulation des tableaux)
FORTRAN 90/95 types dérivés,
fonctionnalités ●
Encore couramment utilisé
des tableaux...
0 – Edition du programme
●
Dans un terminal, tapez les instructions
suivantes
Terminal
N’oubliez pas
ce « & » !!!
minuscules :
« PROGRAM » est équivalent à
« program » ou à « pRoGrAm »
! Instructions
« nom_prog » est le nom du bloc
PROGRAM/END PROGRAM,
choisi par l’utilisateur, on le met ici
en minuscules par convention.
●
La compilation transforme le code Fortran en un
fichier exécutable (nom spécifié après -o)
Exemple
PROGRAM precis
IMPLICIT NONE
REAL, PARAMETER :: pi=ACOS(-1.)
●
Exécution
PRINT *, pi Affiche une
END PROGRAM precis valeur approchée
de pi
●
On peut doubler la précision avec l’option -r8
Affiche deux fois
plus de chiffres
significatifs.
4a – Test IF / THEN / ELSE
●
Utilisez cette syntaxe dans le programme, pour faire
afficher « Vous êtes majeur » ou « Vous êtes mineur »
ou « Saisie incorrecte ! » si l’âge entré est négatif.
4c – Branchement suivant les
valeurs d’une variable (var)
SELECT CASE ( var ) Exemple
CASE ( valeurs1 ) SELECT CASE ( age )
………………………. CASE ( 0:17 )
PRINT * , ’’Vous etes mineur’’
[ CASE ( valeurs2 )
CASE ( 18 )
………………………. etc. ] PRINT *, ’’Vous etes tout juste majeur’’
CASE ( 19: )
[ CASE DEFAULT PRINT * , ’’Vous etes majeur’’
………………………. ] CASE DEFAULT
END SELECT PRINT * , ’’Saisie incorrecte !’’
END SELECT
●
« var » est de type INTEGER ou CHARACTER seulement
●
« valeurs1 », « valeurs2 » est une valeur ou une liste de valeurs
●
liste de valeurs arbitraires : séparer par une virgule → CASE (1, 8, 9, 23)
Deux pièges à éviter
TEST D’EGALITE DE DEUX REELS a et b
!
IF (a == b) THEN ← à éviter à cause de la précision numérique
IF ( ABS(a-b) < eps ) THEN ← préférable : égalité à eps près
où « eps » est une constante (1E-6 par exemple).
Quand « ,pas » n’ est pas spécifié, il vaut +1. END PROGRAM calcul
●
Ecrivez un programme qui affiche les valeurs décimales
de π/8, 3π/8, 5π/8, …, 15π/8 .
5b – Boucles « faire tant que »
et « faire jusqu’à ce que »
DO WHILE ( condition1 ) DO
………………………. ……………………….
………………………. IF ( condition2 ) EXIT
END DO END DO
Exemple Exemple
PRINT * , ’’Entrez x > 0’’ PRINT * , ’’Entrez x > 0’’
READ * , x DO
DO WHILE ( x <= 0 ) READ * , x
PRINT *, ’’Incorrect, entrez x > 0’’ IF ( x > 0 ) EXIT
READ * , x PRINT *, ’’Incorrect, entrez x > 0’’
END DO END DO
Toujours vérifier que les Noter que « condition2 » est
! variables utilisées dans la l’inverse de « condition1 ».
« condition1 » ont bien été Souvent cette forme est plus
initialisées préalablement ! commode à utiliser.
… PAUSE 1 ...
6a – Tableau statique
Les tableaux statiques sont ceux dont on connaît les dimensions à l’étape de compilation.
Déclaration
La fonction Le sous-programme
REAL FUNCTION tempK ( tC ) SUBROUTINE convert ( tC, tK, tF )
REAL, INTENT ( IN ) :: tC REAL, INTENT ( IN ) :: tC
tempK = tC + 273.15 REAL, INTENT ( OUT ) :: tK, tF
END FUNCTION tempK tK = tC + 273.15
est appelée par exemple par : tF = 9*tC/5 + 32
END SUBROUTINE convert
Programme appelant
tC_amb = 20.
tK_amb = tempK ( tC_amb ) est appelé par exemple par :
Prog. appelant
PRINT *, ’’Temp. ambiante :’’ , & tC_amb = 15.
tK_amb, ’’ Kelvin.’’ CALL convert (tC_amb, tK_amb, tF_amb)
PRINT *, ’’La glace fond a ’’ , & PRINT *, ’’Temp. ambiante :’’ , &
tempK ( 0. ) , ’’ Kelvin.’’ tK_amb, ’’K ou’’ , tF_amb, ’’°F. ’’
A l’appel, les valeurs des paramètres d’entrée A l’appel, les valeurs des paramètres d’entrée
( INTENT(IN) ) sont transmises à la fonction. ( INTENT(IN) ) sont transmises au sous-prog :
1er appel : tC_amb (valeur 20.) → tC, 2nd : 0. → tC tC_amb (valeur 15.) → tC
A l’issue de l’appel, « tempK ( a ) » est remplacée A l’issue de l’appel, les valeurs de sortie ( INTENT(OUT) )
par la valeur de tempK calculée dans la fonction sont transmises au programme appelant :
pour tC = a. tK → tK_amb et tF → tF_amb
7c – Attribut INTENT des
paramètres d’appel
Deux types de variables sont déclarées dans les procédures :
- les variables et constantes locales déclarées de manière normale
- les variables de la liste d’appel ⇒ attribut INTENT
INTENT (...) Vocation Contraintes
IN Paramètre d’entrée ●
Doit posséder une valeur à l’appel
●
Ne peut être modifié dans la procédure
●
Peut être une constante à l’appel
OUT Paramètre de sortie ●
Doit être initialisé dans la procédure
●
Ne peut pas être une constante à l’appel
INOUT Paramètre ●
Doit posséder une valeur à l’appel
d’entrée-sortie ●
Doit être modifié dans la procédure
●
Ne peut pas être une constante à l’appel
Exemple SUBROUTINE normalise ( v ) REAL, DIMENSION (3) :: v
REAL, DIMENSION ( : ), INTENT ( INOUT ) :: v Prog. appelant
REAL :: norme_v ! variable locale v = (/ 1.5, 2., 2.5 /)
norme_v = SQRT( SUM ( v**2 ) ) CALL normalise ( v )
v = v / norme_v
END SUBROUTINE normalise
PRINT *, ’’ v / ||v|| : ’’ , v
8 – Module
mod_prog.f90 prog.f90
MODULE temperature USE nom_module PROGRAM conversion
IMPLICIT NONE rend les variables, USE temperature
! Déclaration de variables types et procédures IMPLICIT NONE
du module
disponibles pour le PRINT *, tempK (...)
! Déclaration de types
programme CALL convert (…)
principal.
CONTAINS END PROGRAM conversion
! Procédures
REAL FUNCTION tempK (…)
●
Les variables déclarées dans une procédure
ne sont pas visibles en dehors de la procédure.
………….. ●
Les variables déclarées dans le programme principal
END FUNCTION tempK ne sont pas visibles dans le module.
●
Seules les variables déclarées avant CONTAINS
sont visibles dans le programme grâce à USE.
SUBROUTINE convert (…)
………….. Compilation : attention aux dépendances
END SUBROUTINE convert
END MODULE temperature d’ abord les fichiers des modules, ensuite ceux qui les utilisent.
Bibliographie
● Les spécificités du Fortran 90, Michel Dubusset, Jean Vignes, éditeur : Technip
● Cours de l'IDRIS
http://www.idris.fr/media/formations/fortran/idris_fortran_base_cours.pdf