Epreuve d`informatique

publicité
Devoir Surveillé informatique
MP,PC,PSI
L’utilisation des calculatrices n’est pas autorisée pour cette épreuve.
Le langage de programmation choisi est Python.
Éolienne verticale « ROPATEC »
Document 1 : Photographie d'une éolienne « ROTAPEC » à axe vertical
Document 2 : Extrait de la plaquette commerciale de l'éolienne
Habituellement, les éoliennes sont sur des mâts et demandent un terrain dégagé. Les éoliennes
verticales peuvent être installées sur des toits terrasses. Inutilisé votre toit peut accueillir une éolienne
pour alimenter en électricité votre bâtiment ou faire chauffer votre ballon d’eau chaude. En effet toutes les
éoliennes Ropatec proposent une solution inédite pour l’alimentation de votre ballon d’eau chaude. Que
vous soyez un particulier, une entreprise (hôtel, restaurant, …) ou une collectivité, cette solution est
intéressante pour vous. La gamme de puissance de Ropatec permet de répondre à tous les besoins
d’énergie.
Problématique
Dans le cadre d’un TIPE, un élève cherche à déterminer les performances de ce type d’éolienne.
Nous allons essayer de l’aider.
1
I. Profil des pales : définition d’une fonction, tracé de courbes
Les profils NACA sont des profils aérodynamiques pour les ailes d’avion développés par le Comité
consultatif national pour l’aéronautique (NACA). Il s’agit de la série de profils la plus connue et utilisée
dans la construction aéronautique.
La forme des profils NACA est décrite à l’aide d’une série de chiffres qui suit le mot « NACA ».
Le profil des pales utilisé pour l’éolienne Ropatec est le profil symétrique NACA 0015.
L’équation du profil supérieur est donnée (le profil inférieur est symétrique par rapport à l’axe
horizontal) :
2
3
4
c 
x
 x
 x
 x
 x  
y ( x)  t 
 0,2969 
 0,1260     0,3516     0,2843     0,1015    (équation 1)
0,2 
c
c
c
c
 c  
- c est la longueur de la corde de profil ;
- x est la position le long de la corde variant de 0 à c ;
- y est la moitié de l’épaisseur pour une valeur donnée de x ;
- t est l’épaisseur maximale en tant que fraction de la corde.
Question 1 :
Reporter sur la figure du profil NACA 0015 donné ci-dessus les tracé nécessaire à l’obtention des
grandeurs c et t et donner ci-dessous leur valeur numérique (en unité arbitraire).
2
On veut utiliser Python pour tracer le profil de l’aile.
Afin de (re)prendre en main les fonctions de tracé, on trace d’abord la courbe représentative de la
fonction sinus, à partir d’instructions disponibles sur de nombreux sites…
On met dans l’éditeur
instructions ci-dessous :
var1=2
var2=sin(var1)
print('var2=',var2)
les
On obtient dans la console le message d’erreur suivant :
Traceback (most recent call last):

File "<tmp 1>", line 2, in <module>
var2=sin(var1)
NameError: name 'sin' is not defined
On met ensuite dans l’éditeur les
On obtient dans la console le message d’erreur suivant :
instructions ci-dessous :
 var2= 0.909297426826
from numpy import *
var1=2
var2=sin(var1)
print('var2=',var2)
Question 2 :
Expliquer pourquoi la première série d’instructions renvoie un message d’erreur alors que la
deuxième série d’instructions renvoie une valeur.
On complète le programme avec les instructions suivantes :
1. from numpy import *
2.
3. x=linspace(-2,6.5,20)
4. print('contenu de x :',x)
5. print('type de x',type(x))
6.
7. import matplotlib.pyplot as plt
8. plt.plot(x,sin(x)) # on utilise la fonction sinus de numpy
9. plt.ylabel('fonction sinus')
10. plt.xlabel("l'axe des abscisses")
11. plt.show()
On peut demander l’affichage de l’aide concernant la fonction linspace en exécutant la
commande : help (linspace)
Voici un extrait de l’aide retournée par Python :
Help on function linspace in module numpy.core.function_base:
linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
Return evenly spaced numbers over a specified interval.
Returns `num` evenly spaced samples, calculated over the
interval [`start`, `stop` ].
The endpoint of the interval can optionally be excluded.
3
Courbe tracée par Python
Question 3 :
Expliquer ce que fait la commande linspace(-2, 6.5, 20) de la ligne 3. Quel est le type de la
variable x ?
Question 4 :
Quel changement aura lieu dans l’exécution du programme si la ligne 11 est supprimée ?
Question 5 :
Définir une fonction profile_NACA0015(x) qui renvoie l’équation du profil supérieur de la pale
de l’éolienne.
4
On souhaite déterminer la valeur maximale du profil y(x) grâce à la méthode de Newton.
Question 6 :
Rappeler le principe de la méthode de Newton. (On pourra s’aider d’un graphique illustratif).
Question 7 :
Écrire une fonction newton1(f, fprim, x0, e) qui prend pour argument une fonction f dont on
cherche un zéro, la fonction dérivée de la fonction f notée fprim, l’abscisse initiale x0 de la suite des
xn, ainsi que la précision e souhaitée (l’algorithme s’arrête lorsque f(xn) ≤ e) et qui renvoie xnf la valeur du
zéro trouvé par la méthode de Newton, la valeur de f(xnf) correspondante ainsi que le nombre d’itération
n effectuées.
Question 8 :
Que se passe-t-il si la fonction f(x) ne s’annule jamais ?
5
Question 9 :
Proposer alors une fonction alternative newton2(f, fprim, e, n_max) qui s’arrête
automatiquement après n_max itérations si aucun zéro n’a été trouvé.
Question 10 :
Donner les expressions de y' (x) et y'' (x).
Question 11 :
Préciser les expressions de f(x) et fprim (x) qu’il faut appeler pour trouver la valeur maximale du
profil y(x).
Question 12 :
Écrire la ligne de commande utilisant la fonction newton1 permettant d’obtenir la valeur maximale
du profil y(x). Bien préciser toutes les variables.
6
On s’intéresse maintenant à la fonction suivante :
1. def mystere(fonction,xmin,xmax) :
2.
valeur = 0
3.
for x in linspace(xmin,xmax,100) :
4.
if fonction(x) > valeur :
5.
valeur = fonction(x)
6.
return valeur
Question 13 :
Rédiger la documentation de la fonction mystere(fonction, xmin,xmax) afin d’expliquer son
fonctionnement puis réaliser un appel de cette fonction permettant de répondre à l’objectif initial :
« déterminer la valeur maximale du profil y(x) ».
II. Détermination des caractéristiques d’inertie d’une pale :
intégration numérique
Pour pouvoir mener à bien les simulations, il faut déterminer le centre de gravité du profil, sa
masse ainsi que son moment d’inertie par rapport à l’axe de rotation de l’éolienne.
On note S la surface de la demi-pale et L son épaisseur.
On repère le centre de gravité d’une pale par (xG,yG). Pour le profil NACA0015, on admet que :
150
x OG


0
x  y ( x)  dx
S
(équation 2).
Question 14 :
Quelle intégrale permettrait de déterminer la surface S de la demi-pale ?
7
Pour déterminer xG on peut calculer numériquement l’intégrale de l’équation 2 en utilisant la
méthode des rectangles.
Exemple de découpage avec 7 rectangles de la demi-section de la pale
Question 15 :
Proposer une fonction centre_gravite_profil(f,xmin,xmax,n), où f est l’équation du profil, xmin
et xmax les valeurs extrémales des abscisses du profil, et n le nombre de rectangles utilisés pour le calcul.
Cette fonction renvoie la valeur du centre de gravité de la demi-pale.
Question 16 :
Comment va-t-on obtenir xG et yG pour le profil complet NACA 0015 ?
8

Le moment d’inertie Ioz de la pale par rapport à l’axe (O, z ) est donné par l’équation :
2
I Oz  
OM
M Pale
   dV dans notre cas :


 profile_ NACA0015( xM ) x 2   y 2  dy   dx (équation 3) ,
M
M
M
M
0
 0

avec M de coordonnées dans le plan (xM, yM), L = 1 m et  = 3 000 kg·m-3.
150
I Oz    L  
Découpage en carrés de 3 mm de côté pour l’intégrale double
La portion de programme ci-dessous définit une fonction moment_inertie (f,xmin, xmax) permettant de
déterminer numériquement le moment d’inertie IOz de la demi-pale supérieure par rapport à l’axe vertical

(O, z ).
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
def moment_inertie(f,xmin,xmax):
"""
Détermine le moment d’inertie du profil par rapport à l’axe (Oz)
f : fonction du profil
xmin,xmax : intervalle de variation de l’abscisse du profil supérieur
"""
taille_carre = 3
masse_v = 3e-6 # masse volumique de l’aluminium en kg/mm3
Ioz = 0
xmax = (150 // taille_carre)*taille_carre
# point M du profil
for x_M in arange(0,xmax,taille_carre) ) :
ymax = (profile_NACA0015(x_M) // taille_carre)* taille_carre
for y_M in arange(0,ymax,taille_carre) :
15.
16.
Ioz =........................................................................
return Ioz
Question 17 :
Compléter la ligne 15 de la fonction moment_inertie (f,xmin, xmax).
Question 18 :
Préciser, en justifiant brièvement, la complexité temporelle de cet algorithme.
Question 19 :
Que faut-il modifier/ajouter pour obtenir le moment d’inertie de la pale complète ?
9
III. Actions aérodynamiques sur le profil : utilisation d’une base de
données
Actions aérodynamiques sur le profil
Les valeurs des différentes actions mécaniques qui s’exercent sur la pale sont :
-
V2
 CD
2
V2
 CL
Force de portance = Fportance    S 
2
V2
 CM  c
Moment de tangage = M tangage    S 
2
Force de traînée = Ftraînée    S 
avec :
-
V : vitesse du fluide,
c = longueur de la pale,
S = surface projetée au sol du profil,
 : masse volumique du fluide.
Les coefficients CD, CL et CM dépendent de l’angle d’incidence (ANGLE) du flux d’air par
rapport à la pale et d’un coefficient (RE) nommé nombre de Reynolds, qui caractérise l’écoulement du
fluide autour de la pale.
Pour les valeurs des coefficients CD, CL et CM, on utilise une base de données dont un extrait est
donné ci-dessous.
ID
2075
2435
2795
3155
…
NAME
NACA0015
NACA0015
NACA0015
NACA0015
…
RE
300000
400000
500000
600000
…
ANGLE
274
274
274
274
…
CD
1.923902
1.923902
1.923902
1.923902
…
CL
-0.1345324
-0.1345324
-0.1345324
-0.1345324
…
CM
0.4757067
0.4757067
0.4757067
0.4757067
…
Extrait de la TABLE intitulée « NACA » de la base de données
Question 20 :
Justifier pourquoi le champ ID doit être une clé primaire.
Question 21 :
Construire la requête SQL permettant d’extraire de la base de données les valeurs de CD et CL pour un
ANGLE de 0° avec le profil « NACA0015 » et pour un nombre de Reynolds RE=1 000 000.
10
Question 22 :
Construire la requête SQL permettant d’extraire les valeurs maximales de CD et CL avec notre profil
« NACA0015 » et pour un nombre de Reynolds RE = 1 000 000.
La table Eoliennes répertorie différents types d’éoliennes par leur numéro (Num : INTEGER) avec
la hauteur du moyeu (Haut : FLOAT) en mètre, la surface utile (Surf : FLOAT) en m2, la vitesse
minimale du vent pour démarrer (Vmin : FLOAT), la vitesse maximale de fonctionnement (Vmax :
FLOAT) et la vitesse nominale (Vnom : FLOAT) en m.s-1. Il y a également un coefficient de performance
(Cp : FLOAT) sans unité.
Eoliennes
Num
1
3
…
Haut
70.0
24.0
…
Surf
1552.21
9.08
…
Cp
0.4
0.3
…
Vmin
5.0
4.0
…
Vnom
12.0
12.0
…
Vmax
27.0
25.0
…
La table Terrains donne simplement une description (Description : STRING) de chaque type de
terrain (Type : INTEGER). La table Vents répertorie la vitesse moyenne du vent (Vmoy : FLOAT) en
m.s-1 en fonction du type de terrain (Type : INTEGER) et de la hauteur (Haut : FLOAT) en mètre.
Terrains
Type
4
7
…
Vents
Description
Herbe coupée
Haies
…
Type
2
7
…
Haut
51.0
80.0
…
Vmoy
9.41
9.54
…
Question 23 :
Construire une requête SQL permettant de sélectionner le numéro des éoliennes pouvant
fonctionner dans le terrain de type « Herbe coupée ».
Question 24 :
Parmi les éoliennes sélectionnées précédemment, afficher celle qui a le meilleur coefficient de
performance.
11
IV. Équation du mouvement de l’axe de l’éolienne
Le mouvement de l’éolienne est décrit par l’équation différentielle du premier ordre suivante :
d (t )
I Az 
 C  r   (t )  M A
dt

avec IAz : inertie de l’éolienne par rapport à son axe de rotation ( A, z ) ,
C : coefficient prenant en compte les forces de frottements fluides,
(t) : vitesse de rotation de l’éolienne,
r : rayon de l’éolienne,
MA : couple d’entrainement
Conditions initiales : (0) = 0 (éolienne à l’arrêt).
Question 25 :
Compléter le script python permettant à partir des conditions initiales et de l’équation différentielle cidessus d’obtenir numériquement l’évolution de la vitesse de rotation de l’éolienne au cours du temps
(entre 0 s et 10 s).
def resolution_diff( instant_initial, instant_final, nb_valeur ):
"""
résoud numériquement l’équation différentielle du premier ordre par la méthode d’Euler
instant_initial : instant initiale en secondes
instant_final : instant final en secondes
nb_valeur : nombre d’itérations
"""
G = 1 # coefficient forces de frottement fluide
r = 1 # rayon de l’éolienne en m
Ioz = 1 # inertie de l’éolienne en kg/m²
MO = 100 # couple d’entrainement en N.m
w0=0 # condition initiale
w=[w0] # initialisation de la liste des vitesses angulaires w
pas_calcul = …....................................# pas de calcul
for i in .....................................................
w = …......................................................
12
V. Pompage par éolienne
Afin d’éviter l’installation de câbles électriques, certains sites tirent directement partie de l’énergie
éolienne pour effectuer quelques travaux mécaniques dont l’irrigation.
L’hélice de l’éolienne tourne à la vitesse angulaire (t) autour de l’axe fixe vertical et entraîne
(grâce à un mécanisme non étudié aujourd’hui) un piston effectuant un mouvement alternatif dans l’eau
d (t )
de la nappe souterraine. On note  (t ) 
.
dt
Une étude mécanique et hydraulique permet d’exprimer l’équation différentielle vérifiée par (t)
d 2 (t )
 F  G  sin(  (t )) .
lors de la phase de descente du piston : J 
dt 2
  (t ) 
En posant le vecteur Y tel que Y(t )   d (t )  , l’équation différentielle à résoudre peut se mettre


 dt 
d (t )




dY(t )
dt
.
sous la forme
 F(t , Y(t )) avec F(t , Y(t ))  
dt
 F  G  sin  (t ) 


J J

La réponse (t) recherchée sur l’intervalle [0, Tmax] sera obtenue par la méthode d’Euler explicite.
Le pas de temps, noté pas, sera choisi constant. L’intervalle de temps discrétisé est alors représenté
par le tableau T = [t0 = 0, t1, …, tN−1 = Tmax].
Pour chaque pas de temps, une valeur approchée Yi de la solution Y(ti) de l’équation différentielle
est recherchée. L’ensemble des Yi représente N vecteurs de dimensions 2, qui seront stockées en mémoire
 ' (0) 
  (0)


 ' (t1 ) 
  (t1 )
sous la forme du tableau : SY  
.




 (T )  ' (T ) 
Max
Max 

Question 26 :
Écrire une fonction tableau(Tmax, N) permettant de calculer le tableau T.
Question 27 :
Écrire une fonction f1(ti,yi), qui prend en arguments la valeur du temps discrétisé i et la valeur du
vecteur Yi = Y(ti) et qui retourne la valeur de F(t , Y(t)).
Question 28 :
Donner la relation de récurrence qui lie Yi+1 à Yi et à F(ti , Yi) en fonction du pas de temps pas.
13
Question 29 :
Écrire une fonction EulerExplicite(Yini,h,Tmax,F) qui prend en arguments Yini, un tableau de
dimension 2 contenant la condition initiale de Y(t), h le pas de temps, Tmax l’instant final du calcul, et F
la fonction du problème de Cauchy.
Cette fonction renverra le tableau SY. L’appel à cette fonction dans le programme se fera avec la
commande SY = EulerExplicite(Y0,pas,tmax,f1).
Question 30 :
Si le pas de temps est divisé par un facteur 10, comment évolue l’erreur de calcul ?
Question 31 :
Donner la complexité de cette méthode pour Tmax fixé et indiquer comment évolue le temps de
calcul quand le pas de temps est divisé par un facteur 10.
On suppose que la quantité de mémoire nécessaire pour réaliser le calcul se limite au stockage de
la matrice SY et du vecteur T. Ces éléments sont représentés en mémoire sous forme de tableaux de
flottants en simple précision.
Question 32 :
Déterminer le nombre d’octets nécessaire en mémoire pour réaliser cette simulation numérique
avec un nombre de pas de temps N = 10 000.
14
Téléchargement