#importer les modules
import numpy as np
import matplotlib.pyplot as plt

#définir les constantes utiles
D = 1e-5
L = 1
T1 = 20
T2 = 100
#définir le nbre de points pour la discrétisation le long de la barre
Nx = 100
#définir le temps total de simulation et le nombre de points temporel de la discrétisation
tmax = 5*3600

#définir les pas temporel et spatial
dt = 1
dx = L/Nx
r = D*dt/dx**2
#discrétisation de x le long de la barre
x = np.linspace(0,L,Nx+1)
#définir le nombre de points temporel de la discrétisation
Nt = int(tmax/dt)

#initialisation de la température initiale à T1
T=T1*np.ones(Nx+1)

#création du taleau des profils de température au cours du temps avec t la température en t+dt et T la températur en t
for i in range(Nt):
    t=np.empty(Nx+1) # création du taleau vide de t
    t[0]=T1 # définiton des conditions aux limites
    t[Nx]=T2
    for k in range (1,Nx):
         t[k]= T[k] + r*(T[k+1]+T[k-1]-2*T[k])
    T = t # pour calculer la propagation de la chaleur à chaque nouveau pas temporel
    if i % 600 == 0: # tracé totes les 10 minutes
          plt.plot(x,T,color='blue')

plt.xlabel('Position x (en m)')
plt.ylabel('température T (en °C)')
plt.title('Diffusion de la chaleur le long de la barre')

plt.show()

