UNIVERSITE SULTAN MY SLIMANE Ann´ ee Universitaire 2019-2020 Facult´ e Polydisc
UNIVERSITE SULTAN MY SLIMANE Ann´ ee Universitaire 2019-2020 Facult´ e Polydisciplinaire Master Physique Moderne /S1 B´ eni Mellal TP n◦1 : Algorithmique & Programmation Exercice 1 : Saisie, calcul, affichage 1. Saisissez avec un ´ editeur de texte et sauvegardez dans un fichier de suffixe appropri´ e le code source suivant : ! Titre de mon programme en fortran program calcul implicit none integer :: x, y, z, t, u real :: a, b ! Mon premier commentaire write(*, *) ”Entrez un nombre entier:” read(*, *) x ! Mon deuxieme ! commentaire write(*, *) ”Entrez un deuxieme entier” read(*, *) y z = x * y ! 3ieme commentaire t = x / y u = mod(x,y) write(*, *) x, ” * ”, y, ” = ”, z, & ” t = ”, t , ” u = ”, u ! decrire la suite write(*,*) ”saisir deux reels ” read (*,*) a, b c = a / b write(*,*) ”a=”, a, ” b=”, b, ” c=”, c write(*,*) ”fin” end program calcul 2. Compiler ce code source en examinant attentivement les messages du compilateur. Corriger pas ` a pas les erreurs dans l’ordre des lignes du code. Que fait le programme ? Exercice 2 : Constante de Stefan 1. Compiler et ex´ ecuter le programme domaine.f90, qui affichent les limites du domaine des valeurs positives repr´ esentables: program real 32 range ! domaine des reels sur 32 bits implicit none write(*,*) ” valeur positive max ”, HUGE(1.) write(*,*) ” valeur positive min ”, TINY(1.) end program real 32 range 2. On souhaite calculer la constante de Stefan σ qui intervient dans l’expression de l’´ emittance totale du corps noir : MB = πB = σT 4 o` u σ = 2π5 15 . k4 c2h3 1 h constante de Planck h = 6.626 × 10−34 J s k constante de Boltzmann k = 1.380 × 10−23 JK−1 c vitesse de la lumi` ere c = 3.000 × 108 m s−1 On doit obtenir σ = 5.67 × 10−8 W m−2 K−4. • ´ Ecrire un programme stefan.f90 qui ´ evalue na¨ ıvement la constante de Stefan en flottants sur 32 bits. On prendra pour simplifer π = 3.141593. • Expliquer pourquoi on n’obtient pas la valeur attendue. • Reformuler l’expression de σ en cherchant ` a limiter le domaine des valeurs interm´ ediaires ` a calculer. • Exploiter la nouvelle formulation. • Reprendre la premi` ere partie de l’exercice en travaillant avec des flottants sur 64 bits (double precision en fortran). Expliquer le comportement en affichant les limites du domaine des sous-types flottants sur 64 bits. Exercice 3 : Fonctions avec retour sans effet de bord • ´ Editer le fichier suivant, produit.f90 en fortran 90. ` A chaque question, prendre soin de faire une copie en incr´ ementant le nom de fa¸ con ` a conserver toutes les versions. module m prod !=> nom du fichier .mod implicit none contains ! proc´ edures de module function prod(x, y) integer :: prod integer, intent(in) :: x, y integer :: z ! locale z = x * y prod = z ! valeur de retour return ! sans valeur end function prod end module m prod program produit use m prod ! relit m prod.mod ! ce qui rend visible l’interface integer :: a1, b1, a2, b2 integer :: p write(*,*) ”Saisir 4 entiers a1,b1,a2,b2” read(*,*) a1, b1, a2, b2 ! deux appels dans une expression p = prod(a1, b1) + prod(a2, b2) write(*,*) ”a1*b1 + a2*b2 = ”, p end program produit 1. Ce programme fait appel ` a une fonction prod qui ne modifie pas ses arguments et rend une valeur ` a l’appelant. Compiler le fichier, observer les fichiers cr´ e´ es. Tester ce programme. Modifier la fonction prod pour qu’elle n’utilise plus de variable locale z et tester. 2. D´ eclarer la variable p en tant que r´ eel real en fortran dans le programme principal. Ex- pliquer les comportements ` a la compilation et ` a l’ex´ ecution. 2 3. En conservant p r´ eel dans chaque langage, d´ eclarer les variables a1, b1, a2 et b2 en tant que r´ eels dans le programme principal. Expliquer les comportements ` a la compilation et ` a l’ex´ ecution. 4. Modifier la fonction prod de mani` ere ` a ce que le programme se compile sans avertissement lorsque a1, b1, a2 et b2 sont d´ eclar´ es r´ eels dans le programme principal. Tester de nouveau. Exercice 4 : Diffusion de particules (devoir) Soit un ensemble de n part particules se d´ epla¸ cant dans un espace unidimensionnel. Toutes les particules se trouvent initialement en x = 0. ` A chaque pas de temps, chaque particule i va effectuer un d´ eplacement dxi d’une valeur al´ eatoire uniform´ ement r´ epartie entre -1 et +1. La position xi des n part particules ` a un instant donn´ e est stock´ ee dans un tableau 1D nomm´ e x. On ne conserve donc pas les trajectoires des particules, mais seulement leurs positions finales. 1. Fichier diffus1.f90 ou diffus1.c : R´ ediger et tester un programme principal diffusion1.f90 ou diffusion1.c qui demande le nombre de particules n part ` a simuler et le nombre de pas de temps n step ` a effectuer, puis affiche les valeurs saisies. Il cr´ ee (d´ eclare ou alloue) ensuite le tableau x de r´ eels (float en C et REAL en fortran) des n part positions. 2. Fichier diffus2.f90 ou diffus2.c : Cr´ eer une proc´ edure init qui initialise toutes les positions ` a z´ ero. Elle respectera l’interface ou le prototype suivant : en fortran : subroutine init(x) real, dimension(:), intent(?) :: x (remplacer le ?) end subroutine init en C : void init(int n part, float * x); si allocation dynamique Sur le mˆ eme mod` ele, cr´ eer une proc´ edure affiche qui imprime toutes les positions sur une seule ligne. Tester l’initialisation et l’affichage depuis le programme principal pour 6 particules. 3. Fichier diffus3.f90 ou diffus3.c : Cr´ eer une proc´ edure move de mˆ eme interface que init et qui, pour chaque particule i effectue un d´ eplacement dxi d’une valeur al´ eatoire uniform´ ement r´ epartie entre -1 et +1. Les tirages feront appel ` a une proc´ edure intrins` eque dont la syntaxe et la nature d´ ependent du langage choisi : • En Fortran, un seul appel au sous-programme intrins` eque random number avec un argument de type tableau de r´ eels qui fournit des r´ eels pseudo-al´ eatoires distribu´ es uniform´ ement dans l’intervalle [0, 1[, que l’on ram` enera dans l’intervalle [-1, 1]. • En C, une suite d’appels ` a la fonction rand qui rend un entier distribu´ e uni- form´ ement dans l’intervalle [0, RAND MAX] ; on le convertira en type float pour ´ eviter les d´ epassements de capacit´ e avant de le ramener dans l’intervalle [-1, 1]. Afficher les positions apr` es ce pas de temps dans le cas de n part=6 particules. Ex´ ecuter de nouveau avec 100 particules pour contrˆ oler qu’on parcourt l’intervalle [-1, 1]. 4. Fichier diffus4.f90 ou diffus4.c Compl´ eter le programme pour lancer un nombre quelconque n step de pas de temps. Tester en affichant les positions ` a chaque pas pour 6 particules et 10 pas. Reprendre avec 100 pas en n’affichant que les positions finales. 3 5. Fichier diffus5.f90 ou diffus5.c ´ Ecrire une fonction moy qui calcule la moyenne des positions des n part particules ` a un instant donn´ e. ´ Ecrire de mˆ eme une fonction var qui calcule leur variance (elle appellera moy) ` a un instant donn´ e. On donne l’interface et les prototypes communs de moy et var: en fortran : real function moy(x) real, dimension(:), intent(?) :: x end function moy en C : float moy(int n part, float * x); Afficher la moyenne et la variance des positions de n part=1000 particules au bout de n step=500 pas de temps. Comparer aux valeurs th´ eoriques. La variance th´ eorique au bout de n step pas est n step/3. 6. Fichier diffus6.f90 ou diffus6.c On ´ etudie maintenant l’´ evolution de la variance en fonction du temps. Cr´ eer un tableau 1D de n step r´ eels (float en C et REAL en fortran) nomm´ e vars et y stocker la variance des positions ` a chaque pas de temps. Introduire dans votre code la proc´ edure ecritvar fournie. Appeler cette proc´ edure qui ´ ecrit sur deux colonnes dans un fichier var.txt le num´ ero du pas et la variance. Une fois le fichier var.txt cr´ e´ e, lancer la commande plot-var.sh (il faudra saisir ensuite votre nom sans accent ni espace) qui produit, au format postscript, le fichier var.ps, graphique de la variance. Afficher ce graphique avec par exemple la commande okular var.ps& pour contrˆ oler. Puis l’imprimer avec la commande : lpr var.ps 7. Fichier diffus7.f90 ou diffus7.c uploads/Industriel/ tp 3 .pdf
Documents similaires










-
29
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Dec 11, 2021
- Catégorie Industry / Industr...
- Langue French
- Taille du fichier 0.1034MB