import matplotlib.pyplot  as plt
import numpy as np
from matplotlib import animation


#1D, effet de peau thermique dans argile
lamb=2.2 #conductivité thermiqu de l'argile, 

muc=2.2e6 # masse volumique fois capacité thermique massique de l'argile
Nx=41

L=20 # profondeur agile
dx=L/(Nx-1) #pas spatial

PeriodeT=365.25*24*3600
dt=0.2*muc*dx**2/lamb #pas temporel
Nt=int(15*PeriodeT/dt)
T=np.zeros((Nx,Nt)) #création du tableau des tempétratures

T[:,0]=15 #condition initiale : température uniforme

for j in range(Nt-1):
    T[1:-1,j+1]=T[1:-1,j]+lamb*dt/muc/dx/dx*(T[2:,j]+T[0:-2,j]-2*T[1:-1,j]) # récurrence
    T[0,j+1]=15+5*np.sin(2*np.pi/PeriodeT*(j+1)*dt) # condition aux limite à l'entrée du sous-sol
    T[-1,j+1]=15 # condition aux limite au bout de la barre

x=np.arange(0,L+dx,dx)

    
fig = plt.figure() # initialise la figure
line, = plt.plot([],[]) 
plt.xlim(0,L)
plt.ylim(9,21)
# fonction à définir quand blit=True
def init():
    line.set_data([],[])
    return line,
    
def animate(j): 
    y = T[:,j]
    line.set_data(x, y)
    return line,

ani = animation.FuncAnimation(fig, animate, init_func=init, frames=Nt//5, blit=True, interval=0.2)
plt.grid(b=True,color='r',linestyle='-')
#plt.yticks(np.arange(-2.5,2.5,0.5))
plt.show()
