# -*- coding: utf-8 -*-
"""
Created on Tue Dec 15 10:50:44 2015

@author: abi
"""

import numpy as np
import matplotlib.pyplot as plt


T1=300.0
T2=400.0
temps=36000# portée en seconde (10h ici, commencer avec des valeurs plus faibles)
l=1.0 # longueur de la barre
alpha=0.00001#lambda/(mu*c)
dx=0.01
dt=1.0
Nx=int(l/dx) +1
Nt=int(temps/dt)+1 #permet de ne pas avoir à modifier Nt quand on augmente le temps

#initialisation de T et conditions au bord
T=np.zeros([Nx,Nt])
T[:,0]=(Nx)*[T1]
T[0,:]=(Nt)*[T1]
T[Nx-1,:]=(Nt)*[T2]

for i in range(1,Nt):
    for k in range(1,Nx-1):
        T[k,i]=T[k,i-1]+(alpha*dt/(dx**2))*(T[k+1,i-1]-2*T[k,i-1]+T[k-1,i-1])
        
#on trace toutes les 10 minutes 
plt.clf()
X=np.linspace(0,l,Nx)  
m=0 
while m*600<Nt:
    plt.plot(X,T[:,m*600])
    m=m+1
plt.show()    

# Lorsque l'on augmente le temps, on observe que le profil de 
# température dans la barre tend vers ce qui était attendu : 
#une fonction affine avec T(0)=T1 et T(1)=T2 