On cherche à modéliser l’évolution de la température dans un barreau cylindrique en aluminium () de longueur . L’évolution de la température est donnée par l’équation de diffusion .
On discrétise spatialement la barre en prenant points.
1/ Sachant que le schéma d’Euler est stable ssi , quel pas temporel maximal peut-on choisir ? On choisira dans toute la suite . Compléter le code suivant.
D = 99e-6
l = 10e-2
N_x = 20
Delta_x = ... # pas spatial
Delta_t = 0.1 # pas temporelLes points sont régulièrement répartis de à : ils délimitent intervalles, donc
Le pas proposé convient donc.
Delta_x = l/(N_x - 1) # pas spatial2/ La température dans le barreau à chaque instant sera stockée dans une matrice de sorte que . On souhaite simuler l’évolution de la température durant 4 minutes. Combien de lignes doit comporter la matrice ? Combien de colonnes ? Compléter le code suivant.
import numpy as np
T = np.zeros((...,...))np.zeros((a,b)) permet de créer une matrice de a lignes et b colonnes initialisée à zéro.Il faut lignes et colonnes.
import numpy as np
N_t = int((4 * 60) / Delta_t)
T = np.zeros((N_t,N_x))3/ On initialise la simulation en supposant la température égale à dans le barreau au début. Compléter le code suivant.
T[...] = 298 # Température initiale de la barreT[i,:] sélectionne la i-ième ligne de T.T[0, :] = 298 # Température initiale de la barre4/ L’extrémité gauche du barreau () est maintenue à une température de tandis que son extrémité droite () est maintenue à . Compléter le code suivant.
T[...] = 350 # Température de la barre en x=0
T[...] = 298 # Température de la barre en x=10cmT[:,j] sélectionne la j-ième colonne de T.T[:,0] = 350 # Température de la barre en x=0
T[:,-1] = 298 # Température de la barre en x=10cm5/ Montrer que l’équation de diffusion peut donner lieu à un schéma d’Euler . Compléter le code suivant.
for i in range(len(T)-1):
for j in range(1, N_x-1):
T[i+1,j] = ...Démo faite en cours.
for i in range(len(T)-1):
for j in range(1, N_x-1):
T[i+1,j] = D * (Delta_t/(Delta_x**2)) * (T[i,j+1] + T[i,j-1]) + (1 - 2*D * (Delta_t/(Delta_x**2))) * T[i,j]6/ Expliquer le choix des bornes des deux boucles du code précédent.
La boucle sur i remplit la ligne i+1 à chaque tour : elle doit donc s’arrêter à l’avant-dernière ligne, sinon T[i+1] sortirait de la matrice. C’est ce que donne range(len(T)-1).
La boucle sur j utilise les voisins T[i,j-1] et T[i,j+1] : elle ne peut pas traiter la première ni la dernière colonne, qui n’ont qu’un seul voisin. Ces deux colonnes sont précisément celles des extrémités du barreau, dont la température est imposée par les conditions aux limites ( et ) : il ne faut surtout pas les recalculer.
7/ Tracer sur le même graphe le profil de température dans la barre au bout de , , , et . Compléter le code suivant.
import matplotlib.pyplot as plt
x = ... # Positions des points de la barre (m)
plt.plot(x, ..., label='t=15s')
plt.plot(x, ..., label='t=30s')
plt.plot(x, ..., label='t=1min')
plt.plot(x, ..., label='t=2min')
plt.plot(x, ..., label='t=4min')
plt.xlabel('Position le long de la barre (m)')
plt.ylabel('Température (K)')
plt.legend()
plt.show()np.linspace(a,b,n) pour créer un tableau de n valeurs régulièrement espacées entre a et b.import matplotlib.pyplot as plt
x = np.linspace(0, l, N_x)
for t in [15, 30, 60, 120, 240]: # en secondes
i = int(t / Delta_t)
plt.plot(x, T[i, :], label=f't={t}s')
plt.xlabel('Position le long de la barre (m)')
plt.ylabel('Température (K)')
plt.legend()
plt.show()8/ Tracer la température du point central de la barre en fonction du temps. Compléter le code suivant.
t = ... # Instants simulés (s)
plt.plot(t, ...)
plt.xlabel('Temps (s)')
plt.ylabel('Température au centre de la barre (K)')
plt.show()T, espacées de .import matplotlib.pyplot as plt
j = N_x // 2
t = np.arange(N_t) * Delta_t # les instants simulés, un par ligne de T
plt.plot(t, T[:, j])
plt.xlabel('Temps (s)')
plt.ylabel('Température au centre de la barre (K)')
plt.show()