import numpy as np
import matplotlib.pyplot as plt

L=2e-2 # plateau de la table de 2 cm d'épaisseur
N=100
dx=L/N

duree=3600

lamb=0.18 # bois conductivité thermique en W/m-1/K
D=0.15e-7    # coefficient de diffusivité

h=1       # coefficient conducto-convectif bois/air en W/m2/K

T1=30     # température imposée face supérieure
T0=20     # face inférieure

T=np.zeros(N)   # tableau stockant le profil de température
T2=np.zeros(N)  # et sa copie

# Profil à t=0 : conditions initiales
T[1:N]=T0
T[0]=T1

# convergence de la méthode si D*dt/(dx**2)<0.5
P=int(3*D*duree/dx**2) # on prend du coup un peu plus d'itérations (facteur 3)
dt=duree/P             # calcul du "pas" de temps

print("nombres d'iterations : "+str(P))

# méthode des éléments finis
for k in range(P):
    T2[0]=T[0]        # condition de Dirichlet en 0
    for i in range(1,N-1):
        T2[i]=T[i]+D*dt/(dx**2)*(T[i+1]+T[i-1]-2*T[i]) # équation de diffusion
                                                       # discrète : on
                                                       # travaille sur la copie
                                                       # T2

    T2[N-1]=T0 #(h*T0+lamb/dx*T[N-2])/(h+lamb/dx)     # condition limite
                                                       # Dirichlet ou Newmann
    T=T2.copy()     # on recopie dans T

# tracé
x=np.linspace(0,L*1000,N) # on créé x de 0 à L en mm

plt.figure(figsize=(10,8))
plt.xlabel("en mm")
plt.ylabel("en °C")
plt.title("Profil de température à t = "+str(duree)+" s")
plt.plot(x,T)
plt.show()


