DEA «Astrophysique et instrumentations associées» Fortran 90/ Benoît Semelin

Documents pareils
Cours Informatique Master STEP

Plan du cours Cours théoriques. 29 septembre 2014

Cours de Fortran 90 / 95

IDRIS 1. Cours Fortran 95

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

1. Structure d'un programme FORTRAN 95

Présentation du PL/SQL

Introduction à MATLAB R

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Enseignement secondaire technique

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Examen Médian - 1 heure 30

Corrigé des TD 1 à 5

Langage Fortran (Base)

STAGE IREM 0- Premiers pas en Python

Perl Console. Votre compagnon pour développer en Perl. Les Journées du Perl , 17 novembre, Lyon. Alexis Sukrieh

Les commandes de base de LINUX

= constante et cette constante est a.

Langage Fortran. Support de cours

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

FORMULAIRE DE STATISTIQUES

AccuRead OCR. Guide de l'administrateur

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr


INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Introduction à la Programmation Parallèle: MPI

Chapitre 2. Classes et objets

Plan de la formation. Calcul parallèle avec MPI. Pourquoi paralléliser? Parallélisation. Présentation, environnement MPI. Communications point à point

PETITE INTRODUCTION AU LANGAGE FORTRAN

Cours d initiation à la programmation en C++ Johann Cuenin

Le langage C. Introduction, guide de reference

Programmer en JAVA. par Tama

Algorithmique et Programmation, IMA

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

UE C avancé cours 1: introduction et révisions

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

TUTORIAL REUTERS. Utilisation de l'utilitaire de recherche Reuters

Chapitre 5 : Les procédures stockées PL/SQL

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Propagation sur réseau statique et dynamique

Une dérivation du paradigme de réécriture de multiensembles pour l'architecture de processeur graphique GPU

LES TYPES DE DONNÉES DU LANGAGE PASCAL

TD3: tableaux avancées, première classe et chaînes

Initiation à l algorithmique

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Guide d'installation rapide TFM-560X YO.13

A.-M. Cubat PMB - Import de notices à partir d un tableur Page 1 Source :

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

La combinaison. naturelle DAIKIN ALTHERMA HYDRIDE POMPE À CHALEUR CHAUFFAGE ET EAU CHAUDE SANITAIRE. Informations préliminaires

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Performances et optimisations

Algorithmes de recherche

Génération de code binaire pour application multimedia : une approche au vol

Le langage SQL Rappels

Les chaînes de caractères

TP1 : Initiation à Java et Eclipse

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

Débuter avec EXPRESS. Alain Plantec. 1 Schema 2

4 Exemples de problèmes MapReduce incrémentaux

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

Organigramme / Algorigramme Dossier élève 1 SI

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Rappels sur les suites - Algorithme

Cours de Programmation en Langage Synchrone SIGNAL. Bernard HOUSSAIS IRISA. Équipe ESPRESSO

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Création d installateurs pour Windows avec InnoSetup

Année Universitaire 2009/2010 Session 2 de Printemps

Configuration des points d'accès

Bases de données cours 4 Construction de requêtes en SQL. Catalin Dima

LES ACCES ODBC AVEC LE SYSTEME SAS

Présentation du langage et premières fonctions

TP2 - Conguration réseau et commandes utiles. 1 Généralités. 2 Conguration de la machine. 2.1 Commande hostname

= 1 si n = m& où n et m sont souvent des indices entiers, par exemple, n, m = 0, 1, 2, 3, 4... En fait,! n m

Bases de Données. Plan

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

Dans ce mémento, vous trouverez les informations détaillées pour configurer les fonctionnalités du Responsive Design dans le Worldsoft CMS:

Étudier si une famille est une base

Bernard HAMM, Évelyne LAVOISIER

2.1 Le point mémoire statique Le point mémoire statique est fondé sur le bistable, dessiné de manière différente en Figure 1.

Table des matières Avant-propos... V Scripting Windows, pour quoi faire?... 1 Dans quel contexte?

Guide de fonctions du téléphone du système SCI Norstar

Faits saillants et survol des résultats du sondage

as Architecture des Systèmes d Information

Cours No 3 : Identificateurs, Fonctions, Premières Structures de contrôle.

PVM 1 PVM. Parallel Virtual Machine

ÉdIteur officiel et fournisseur de ServIceS professionnels du LogIcIeL open Source ScILab

Micro-ordinateurs, informations, idées, trucs et astuces utiliser le Bureau à distance

TP 1 Introduction à Matlab Février 2009

Analyse en Composantes Principales

Transcription:

DEA «Astrophysique et instrumentations associées» Fortran 90/95 2004 Benoît Semelin

Quelques liens utiles: Ce cours n'est pas exhaustif! Pour des renseignements complémentaires: - Le cours de l'idris (centre national de calcul du CNRS): http://www.idris.fr/data/cours/lang/fortran/fortran_base/idris_fortran_cours.pdf - Passer de f77 à f90 (en anglais): http://www.nsc.liu.se/~boein/f77to90/f77to90.html

De f77 à f90 f90 sait faire tout ce que f77 sait faire. f90 n'impose pas de format de fichier rigide. f90 propose de nouvelles fonctionnalités. f90 incite à une programmation plus robuste. f90 donne des codes plus compacts. f90/95 tente de préparer l'auto-parallelisation.

Déclaration de variable, compléments. Mémoriser la valeur d'une variable locale: SUBROUTINE ITERATION( ) INTEGER, SAVE :: count La variable count garde sa valeur entre un appel à la procédure et le suivant. Déclaration et allocation dynamique: REAL, ALLOCATABLE, DIMENSION(:,:) :: field ALLOCATE(field(500,500))... DEALLOCATE(field) L'allocation dynamique permet d'économiser la mémoire.

Opérations sur les tableaux En fortran 90, les opérateurs arithmétiques s'appliquent aussi aux tableaux: Initialisation grâce à = : REAL, DIMENSION(20,20,20) :: field,grad field=0. grad=field... Opérations terme à terme : REAL, DIMENSION(3) :: x =(/1.,2.,3./) REAL, DIMENSION(3) :: y =(/3.,1.,2./) REAL, DIMENSION(3) :: z z=x+y z=x-y z=x*y z=x/y z=2.+x... Appliquer une fonction intrinsèque à un tableau: - Tout les éléments de field sont initialisés à 0. - field est copié élément par élément dans grad. - field et grad doivent avoir la même forme! - Pas besoin de boucle! - Les opérations se font élément par élément : z=x*y => z(3)=x(3)*y(3) - Les tableaux doivent avoir la même forme! - Les scalaires prennent automatiquement la forme voulue. - Attention, si b(2)=0., z=x/y produit une erreur! REAL, DIMENSION(20,20,20) :: field,grad field=log(grad) - La fonction est appliquée élément par élément - Les tableaux doivent avoir la même forme!

Fonctions intrinsèques spécifiques aux tableaux Pour compléter les opérateurs et fonctions génériques, il existe des fonctions spécifiques aux tableaux: Produit scalaire : DOT_PRODUCT c=dot_product(a,b) Produit matriciel : MATMUL Fonctions qui acceptent un masque: Un masque est un tableau de type LOGICAL de même forme que l'argument principal de la fonction. Il résulte en général d'une condition logique. La fonction s'applique aux éléments Exemples: REAL, DIMENSION(20) :: a,b,c REAL, DIMENSION(10,20) :: a REAL, DIMENSION(20,10) :: b REAL, DIMENSION(10,10) :: c c=matmul(a,b) - Réalise le produit scalaire de a et b. - a et b doivent avoir la même forme (et être des vecteurs) - Réalise le produit matricielle de a et b. - Les conditions habituelles sur les dimensions s'appliquent. de l'argument principal pour lesquels la valeur de l'élément du masque est.true. MAXLOC ( A, A < 0. ) : Renvoie un vecteur contenant la position du plus grand élément de A, parmi les éléments qui respectent A < 0 (ceci est le masque). MINLOC ( A, sin(a) < 0.5 ) : Renvoie un vecteur contenant la position du plus petit élément de A, parmi les éléments qui respectent sin(a) < 0.5

Fonctions sur les tableaux (suite) Autres fonctions avec masque: COUNT ( MASQUE) : Renvoie le nombre d'éléments TRUE dans le masque : count(a>0.) ALL (MASQUE): Renvoie TRUE si tout les éléments du masque sont vrais: ALL(A<10.) ANY (MASQUE): Renvoie TRUE si au moins un élément du masque est vrai: ALL(A=1.) MAXVAL( A, MASQUE ) : Renvoie la valeur maximale de A masqué. MINVAL( A, MASQUE ) : Renvoie la valeur minimale de A masqué. PRODUCT( A, MASQUE) : Renvoie le produit des éléments de A masqué. SUM(A,MASQUE): Renvoie la somme des élément de A masqué. MERGE(A,B,MASQUE): Renvoie un tableau contenant A la où le masque est TRUE, B ailleurs. MERGE(A,B,A>B)

Sections de tableaux: définition On peut travailler sur des parties d'un tableau. On définit une «section» de vecteur par triplet: (index_min : index_max : pas) a() a(4:7:1), a(4:7) a(2:10:3), a(2::7) 1 2 3 4 5 6 7 8 9 10 4 5 6 7 2 5 8 Si ils sont omis, les éléments du triplet ont une valeur par défaut, (1:dimension:1) Cela marche avec des tableaux à 2 (et plus) dimensions: a() a(3:9,6) a(2:9:2,1:10:3) X X X X X X X X X X X X X X X X X X X X X X X

Sections de tableaux: utilisation Les sections de tableaux peuvent être utilisé pour l'initilisation, avec les opérateurs et les fonction intrinsèques: REAL, DIMENSION(20,20) :: mx,my REAL, DIMENSION(4,4) :: coarse_x,coarse_y REAL, DIMENSION(20) :: z mx(:,1:20:2)=1. mx(:,2:20:2)=0. my=0 my(1:10,1:10)=mx(1:10,1:10) coarse_x=mx(5:20:5,5:20:5) z=mx(5,:)*my(:,5) Rappel: les opérations se font entre tableaux de même forme. Attention: une section de tableau n'a pas la même forme que le tableau! Toutes les opérations valables sur les tableaux le sont sur les sections de tableaux.

Manipulation de tableaux grâce à «WHERE» Les sections de tableaux possèdent une géométrie rigide (pas constant).les masques offrent plus de souplesse (on peut définir leur géométrie à la main!). Il est possible de les utiliser en dehors des fonctions intrinsèques. Utilisation de WHERE - ELSEWHERE - END WHERE: f90 REAL, DIMENSION(20,20) :: field... WHERE (field >3.) field=field*field*field ELSEWHERE <----------- (optionnel) field=field*field END WHERE f95 REAL, DIMENSION(20,20) :: field... WHERE (field >3.) field=field*field*field ELSEWHERE (field >2.) field=field*field ELSEWHERE field=field END WHERE WHERE est équivalent, en plus compact, à une combinaison de DO et de IF.

Vers l'auto-parallélisation: fonction FORALL (f 95) FORALL permet de combiner plusieurs DO et IF en une seule instruction: FORALL( i = 1 : N, j = 1 : N, i /= j ) phi(i)=1./(x(i)-x(j)) END FORALL - Les boucles sur i et j sont spécifiées par des triplets 1:N(:1). - La boucle n'est exécutée que si i/=j. Ici, FORALL remplace deux boucles DO imbriquées et un IF. ATTENTION: - Le compilateur choisi l'ordre d'exécution des itérations!!! - Donc, le résultat ne doit pas dépendre de l'ordre! - x(i+1)=x(i)+x(i+1) ne doit pas être codé avec FORALL. Pourquoi cette restriction forte? Cela permet d'activer l'auto-parallélisation si le compilateur en est capable. Il distribue alors les itérations sur plusieurs processeurs.

Utilisation des modules L'utilisation des modules produit des codes plus robustes, et plus facile à débuguer. Un module est une partie de codes écrite dans un fichier séparé et compilée séparément. Il est utilisable par d'autres parties du codes à la demande. Déclarer des variables communes MODULE VARIABLES IMPLICIT NONE SAVE INTEGER, PARAMETER :: N=50000 REAL, DIMENSION(3,N) :: pos,vel,acc END MODULE VARIABLES SAVE permet de conserver les variables de VARIABLES d'une procédure qui l'utilise à l'autre. Procédures dans les modules. MODULE DYNAMIQUE USE VARIABLES IMPLICIT NONE... autres déclarations... CONTAINS SUBROUTINE STEP(dt) IMPLICIT NONE REAL, INTENT(IN) :: dt vel=vel+acc*dt pos=pos+vel*dt END SUBROUTINE STEP END MODULE DYNAMIQUE Une procédure de module (fonction ou subroutine) est déclarée de façon explicite: le compilateur est capable, pour chaque appel à la procédure de vérifier la validité des arguments => débugage facile.

Pointeurs Un pointeur est une variable qui contient une adresse mémoire. On les définit en f90 de la manière suivante: REAL :: y REAL, TARGET :: x REAL, POINTER :: p p=>x <-------- assignation (1) y=p*p <-------- utilisation (2) (1) En f90 un pointeur ne peut pointer que vers une variable déclarée comme TARGET. (2) Si, dans une expression, la valeur d'une variable est attendue et qu'un pointeur apparaît, il est remplacé par la valeur de la variable vers laquelle il pointe. Pointeur vers un tableau, une section de tableau: REAL, DIMENSION(100,100),TARGET :: y REAL, DIMENSION(:,:), POINTER :: p1,p2,p3 p1=> y p2=> y(20:80:2,20:80:2) p3=> p2(1::2,1::2) On gagne de la place mémoire!

Fin