TP1 Intro Modelisation

This commit is contained in:
Minh-Thi Bui 2023-05-09 22:19:36 +02:00
commit 5473ade781
25 changed files with 159 additions and 0 deletions

31
EA.py Normal file
View file

@ -0,0 +1,31 @@
import numpy as np
import sympy
import matplotlib.pyplot as plt
def EA1(xi,alpha):
return 1-np.sqrt(1-2*alpha*(1-alpha)*(1-np.cos(xi)))
def EA2(xi,alpha):
return 1-np.sqrt(1-(alpha**2)*(1-alpha**2)*((1-np.cos(xi))**2))
def EA3(xi,alpha):
theta=xi/2
return 1-np.sqrt((1-2*alpha*(np.sin(theta)**2)*(1-(1-alpha)*(np.cos(theta)**2)))**2
+(2*alpha*np.cos(theta)*np.sin(theta)*(1+(1-alpha)*(np.sin(theta)**2)))**2)
xi = np.linspace(0,np.pi/8,1000)
for alpha in [0.2,0.5,0.8]:
fig=plt.figure(1)
plt.title(r"Erreur d'amplitude en fonction de $\zeta$ pour CFL = "+str(alpha))
plt.xlabel(r'$\zeta$')
plt.ylabel(r'$E_A$')
plt.axis([-0.02 , np.pi/8+0.02 , 1e-15, 1e-1])
plt.semilogy(xi,EA1(xi,alpha),'-g',label="Schema 1")
plt.semilogy(xi,EA2(xi,alpha),'-b',label="Schema 2")
plt.semilogy(xi,EA3(xi,alpha),'-r',label="Schema 3")
plt.legend()
plt.grid(True)
plt.show(block=False)
#plt.savefig("EA"+"_CFL ="+str(alpha)+".png")
plt.close('all')

42
EP.py Normal file
View file

@ -0,0 +1,42 @@
import numpy as np
import math
import matplotlib.pyplot as plt
import EA
def acos(X):
Y=np.zeros_like(X)
for i in range(len(X)):
Y[i]=math.acos(X[i])
return Y
def EP1(xi,alpha):
return alpha*xi - acos((1-alpha*(1-np.cos(xi)))
/(1-EA.EA1(xi,alpha)))
def EP2(xi,alpha):
return alpha*xi - acos((1-(alpha**2)*(1-np.cos(xi)))
/(1-EA.EA2(xi,alpha)))
def EP3(xi,alpha):
theta=xi/2
return alpha*xi - acos((1-2*alpha*(np.sin(theta)**2)*(1-(1-alpha)*(np.cos(theta)**2)))
/(1-EA.EA3(xi,alpha)))
xi = np.linspace(0,np.pi/8,1000)
#print(EP1(xi,0.5),"\n",EP3(xi,0.5))
for alpha in [0.2,0.5,0.8]:
fig=plt.figure(1)
plt.title(r"Erreur de phase en fonction de $\zeta$ pour CFL = "+str(alpha))
plt.xlabel(r'$\zeta$')
plt.ylabel(r'$E_\phi$')
plt.axis([-0.02 , np.pi/8+0.02 , -0.0010, 0.0030])
plt.plot(xi,abs(EP1(xi,alpha)),'-g',label="Schema 1")
plt.plot(xi,abs(EP2(xi,alpha)),'-b',label="Schema 2")
plt.plot(xi,abs(EP3(xi,alpha)),'-r',label="Schema 3")
plt.legend(loc='upper left')
plt.grid(True)
plt.show(block=False)
#plt.savefig("EP"+"_CFL ="+str(alpha)+".png")
plt.close('all')

BIN
Fig/EA_CFL =0.2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
Fig/EA_CFL =0.5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
Fig/EA_CFL =0.8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
Fig/EP_CFL =0.2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
Fig/EP_CFL =0.5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
Fig/EP_CFL =0.8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
Fig/u=X(x)T=10_CFL =0.8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
Fig/u=X(x)T=1_CFL =0.8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
Fig/u=X(x)T=5_CFL =0.8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
Fig/u=f(x)CFL =0.2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
Fig/u=f(x)CFL =0.5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
Fig/u=f(x)CFL =0.8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

BIN
Fig/u=f(x)T=10_CFL =0.2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
Fig/u=f(x)T=10_CFL =0.5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
Fig/u=f(x)T=10_CFL =0.8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
Fig/u=f(x)T=1_CFL =0.2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
Fig/u=f(x)T=1_CFL =0.5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
Fig/u=f(x)T=1_CFL =0.8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
Fig/u=f(x)T=5_CFL =0.2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
Fig/u=f(x)T=5_CFL =0.5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
Fig/u=f(x)T=5_CFL =0.8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

52
tp1.py Normal file
View file

@ -0,0 +1,52 @@
# -*- coding: cp1252 -*-
import numpy as np
import matplotlib.pyplot as plt
import tp1_lib as tp
## Initialisation des données
Lx = 1.0 # Demi longueur de l'intervalle
a = 2.0 # Vitesse du signal
tmax = 2.0 # Temps max de la simulation (=T)
J= 201 # Nombre de noeuds
X = np.linspace(-Lx,Lx,J) # Abscisses des noeuds
dx = X[1]-X[0] # Pas de maillage
cfl = 0.8
#cfl = 0.5
#cfl = 0.2 # Nombre CFL
dt = cfl*dx/a # Valeur du pas de temps
## Initialisation de la solution
Uini = tp.Uinit(X,J)
U1 = Uini # Schema 1
U2 = Uini # Schema 2
U3 = Uini # Schema 3
for tmax in (1,5,10):
##Boucle en temps (tant que time < tmax)
time = 0.0
while time < tmax :
dt_reel = min(dt, tmax-time) # dt_reel = dt sauf si tmax - time < dt
alpha = a*dt_reel/dx # Nombre CFL effectif
print ('TIME ITERATION : ' , time , ' \ ' , tmax)
U1 = tp.schema1(U1,J,alpha) # Mise à jour de la solution schema 1
U2 = tp.schema2(U2,J,alpha) # Mise à jour de la solution schema 2
U3 = tp.schema3(U3,J,alpha) # Mise à jour de la solution schema 3
time += dt_reel # Incrémente le temps
## Affichage des résultats
fig=plt.figure(1)
plt.title("Solution u en fonction de x pour CFL = "+str(cfl)+" et T = "+str(tmax))
plt.xlabel('x')
plt.ylabel('u')
plt.axis([-1 , 1 , -0.25, 1.25])
plt.plot(X,U1,'-g',X,U2,'-b',X,U3,'-r',X,Uini,'-k')
plt.legend(['Schema1','Schema2', 'Schema3', 'Exacte'],loc='best')
plt.grid(True)
plt.show(block=False)
plt.pause(10.0) ## Pause pour voir la figure avant sauvegarde
#plt.savefig("u=X(x)"+"T="+str(tmax)+"_CFL ="+str(cfl)+".png") ##sauve figure
plt.close('all')

34
tp1_lib.py Normal file
View file

@ -0,0 +1,34 @@
import numpy as np
def khi(X):
khi = np.zeros_like(X)
khi[(X >= -1/4) & (X <= 1/4)] = 1
return khi
def Uinit(X,J):
Uinit = np.zeros(J)
Uinit[:] = 256 * ((X[:]-1/4)**2) * ((X[:]+1/4)**2) * khi(X)[:]
return Uinit
"""def Uinit(X,J):
Uinit = np.zeros(J)
Uinit[:] = khi(X)[:]
return Uinit"""
def schema1(U0,J,alpha):
U0=np.append(U0[J-2],U0)
U1=U0[1:J+1] - alpha*(U0[1:J+1]-U0[0:J])
return U1
def schema2(U0,J,alpha):
U0=np.append(U0[J-2],U0)
U0=np.append(U0,U0[1])
U1=U0[1:J+1]-(alpha/2)*(U0[2:J+2]-U0[0:J])+(0.5*alpha**2)*(U0[2:J+2]-2*U0[1:J+1]+U0[0:J])
return U1
def schema3(U0,J,alpha):
U0=np.append(U0[J-2],U0)
U0=np.append(U0[J-3],U0)
U0=np.append(U0,U0[1])
U1=U0[2:J+2]-alpha*(U0[2:J+2]-U0[1:J+1])-((alpha/4)*(1-alpha)*(U0[3:J+3]-U0[2:J+2]-U0[1:J+1]+U0[0:J]))
return U1