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

#définir les constantes utiles
D = 1
L = 2
T1 = 1 #température initiale unfiorme le long de la barre
T0 = 0
#définir le nbre de points pour la discrétisation le long de la barre
Nx = 100
#définir le temps total de simulation
tmax = 1
#définir les pas temporel et spatial
dt = 1e-4
dx = L/Nx
r = D*dt/(dx**2)
#discrétisation de x le long de la barre
x = np.linspace(0,L,Nx+1)

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

#ITERATION TEMPORELLE
Nt = int(tmax/dt)

#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]=T0 # définiton des conditions aux limites
    t[Nx]=T0
    for k in range (1,Nx):
        t[k]= T[k]+r*(T[k+1]+T[k-1]-2*T[k])

    if i % 1000 == 0: # tracé toutes les 0.1 S
          plt.plot(x,T,color='blue')
    T = t # pour calculer la propagation de la chaleur à chaque nouveau pas temporel

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()

