Python, équation de la chaleur, discrétisation spatiale, condition de stabilité, propagation de température, stabilité du système, analyse numérique, modélisation thermique, programmation, langage informatique, méthode des différences finies, pas de temps, équation différentielle, physique
Il s'agit de rédiger un programme Python simple permettant de répondre à un problème physique posé : un exemple classique de problème de diffusion avec des conditions aux limites variables est la diffusion de la chaleur dans la croûte terrestre alors que la température de la surface varie avec les saisons. On suppose que la température moyenne en un point donné de la surface de la Terre varie.
[...] Choix du pas de temps et de l'intervalle de discrétisation spatiale : Pour avoir des tracés suffisamment « lisses », il faut un nombre important de points sur l'axe des positions . On prendra alors par exemple m. Pour le choix du pas de temps, on commence par prendre jour. On constate que la propagation de l'équation de la chaleur est instable, la température diverge. On réduit alors le pas de temps (en divisant par 10) jusqu'à temps que le système devienne stable. [...]
[...] Rédaction d'un programme Python afin de résoudre un problème simple Discrétisation du problème : On a l'équation de la chaleur suivante : . On utilise les différences finies pour discrétiser cette équation. On note l'intervalle de discrétisation spatiale, et le pas de temps. On utilise l'indice pour la position et pour le temps. On a ainsi qui devient et qui devient . On a donc : D'où . [...]
[...] On trouve alors jour. Note du rédacteur : je ne sais pas si vous avez vu ce point-là en cours, mais il faut en fait respecter la condition de stabilité suivante : . Donc pour et on obtient ce qui est bien inférieur à . Résolution du problème : On met en place le programme avec le code Python suivant : # coding: utf-8 import numpy as np import matplotlib.pyplot as plt # Définition des paramètres # paramètre du modèle de température en surface tau = 365.0 # jours A = 10.0 # °C B = 12.0 # °C # coefficient de diffusion thermique D = 0.1 # m2/jour # profondeur xmax = 20.0 # m # température à 20m TL = 11.0 # °C # durée max tmax = 10.0 * 365.0 # jours # pas de temps et de discrétisation spatiale h = 0.01 # jours dx = 0.1 # m # constante K = D * h / (dx * dx) # initialisation du tableau des températures en fonction de x et t nx = int(xmax/dx) + 1 nt = int(tmax/h) + 1 x = np.linspace(0, xmax, nx) t = np.linspace(0, tmax, nt) T = 10.0 * np.ones((nx,nt)) # conditions aux limites # pour x = 0 = A + B * np.sin(2.0 * np.pi * t / tau) # pour x = xmax = 11.0 # propagation for n in range(0,nt-1): = K * - 2.0 * + + # tracés sur la 10ème année plt.plot(x,T[:,int(9.00 * 365/h) + plt.plot(x,T[:,int(9.25 * 365/h) + plt.plot(x,T[:,int(9.50 * 365/h) + plt.plot(x,T[:,int(9.75 * 365/h) + plt.xlabel('x plt.ylabel('T plt.legend(('t = 9 ans', = 9 ans 3 mois', = 9 ans 6 mois', = 9 ans 9 mois')) plt.grid() plt.show() On obtient alors le graphique suivant : On voit bien les variations de la température selon la profondeur en fonction des saisons. [...]
Source aux normes APA
Pour votre bibliographieLecture en ligne
avec notre liseuse dédiée !Contenu vérifié
par notre comité de lecture