Analyse de champ
Marc BUFFAT, dpt mécanique, Université Claude Bernard Lyon 1
Mise à disposition selon les termes de la
.
%matplotlib inline
import numpy as np
import scipy as sp
import matplotlib.pyplot as plt
from matplotlib import animation
from cinematique import part_animationAnalyse locale d’un champ¶
Etude locale de la trajectoire d’une particule fluide dans un champ de vitesse dont on se donne le gradient:
Localement le champ de vitesse en est:
Les trajectoires des particules fluides vérifient:
la rotation solide d’une particule (ex: )
Le volume d’une particule varie comme la divergence du champ de vitesse
Analyse locale d’un champ 2D¶
On se donne la valeur locale et son gradient du champ de la vitesse.
Locallement en supposant que ce gradient est constant on peut écrire
U0=np.array([1.0,0.])
gradU=np.array([[-1,1.0],[1.,1.0]])
anim=part_animation(U0,gradU,FigSize=(7,5))Gradient de U = | -1 1 |
| 1 1 |
Divergence div(U)= 0.0
Rotation W_z = 0.0
volume initiale 0.020000000000000004
Animation avec 40

plt.rc('animation', html='jshtml')
animLoading...
Cisaillement homogéne¶
gradU=np.array([[0,1],[0,0]])
anim=part_animation(U0,gradU,FigSize=(7,5))Gradient de U = | 0 1 |
| 0 0 |
Divergence div(U)= 0
Rotation W_z = -0.5
volume initiale 0.020000000000000004
Animation avec 40

plt.rc('animation', html='jshtml')
animLoading...
Rotation homogéne¶
gradU=np.array([[0,1],[-1,0]])
anim=part_animation(U0,gradU,FigSize=(7,5))Gradient de U = | 0 1 |
| -1 0 |
Divergence div(U)= 0
Rotation W_z = -1.0
volume initiale 0.020000000000000004
Animation avec 40

plt.rc('animation', html='jshtml')
animLoading...
Déformation à volume constant¶
gradU=np.array([[1,0.5],[0.5,-1]])
anim=part_animation(U0,gradU,FigSize=(7,5))Gradient de U = | 1 0.5 |
| 0.5 -1 |
Divergence div(U)= 0.0
Rotation W_z = 0.0
volume initiale 0.020000000000000004
Animation avec 40

plt.rc('animation', html='jshtml')
animLoading...
Compression¶
gradU=np.array([[-1,0.],[0.,0.5]])
anim=part_animation(U0,gradU,FigSize=(7,5))Gradient de U = | -1 0 |
| 0 0.5 |
Divergence div(U)= -0.5
Rotation W_z = 0.0
volume initiale 0.020000000000000004
Animation avec 40

plt.rc('animation', html='jshtml')
animLoading...
###Dilatation
gradU=np.array([[1,0.],[0.,-0.5]])
anim=part_animation(U0,gradU,FigSize=(7,5))Gradient de U = | 1 0 |
| 0 -0.5 |
Divergence div(U)= 0.5
Rotation W_z = 0.0
volume initiale 0.020000000000000004
Animation avec 40

plt.rc('animation', html='jshtml')
animLoading...
Cas Général d’un écoulement compressible¶
décomposition du champ de vitesse
en partie anti-symétrique (rotation) et symétrique (déformation)
gradU=np.array([np.random.rand(2),np.random.rand(2)])
anim=part_animation(U0,gradU,FigSize=(7,5))Gradient de U = | 0.192231 0.954767 |
| 0.0823469 0.671444 |
Divergence div(U)= 0.8636741681535179
Rotation W_z = -0.4362099720405201
volume initiale 0.020000000000000004
Animation avec 40

plt.rc('animation', html='jshtml')
animLoading...
partie déformation (symétrique)¶
UZ = np.array([0.,0.])
D = 0.5*(gradU + gradU.transpose())
anim=part_animation(U0,D,FigSize=(7,5))Gradient de U = | 0.192231 0.518557 |
| 0.518557 0.671444 |
Divergence div(U)= 0.8636741681535179
Rotation W_z = 0.0
volume initiale 0.020000000000000004
Animation avec 40

plt.rc('animation', html='jshtml')
animLoading...
partie rotation(antisymétrique)¶
R = 0.5*(gradU - gradU.transpose())
anim=part_animation(U0,R,FigSize=(7,5))Gradient de U = | 0 0.43621 |
| -0.43621 0 |
Divergence div(U)= 0.0
Rotation W_z = -0.4362099720405201
volume initiale 0.020000000000000004
Animation avec 40

plt.rc('animation', html='jshtml')
animLoading...
Cas Général d’un écoulement incompressible¶
gradU=np.array([np.random.rand(2),np.random.rand(2)])
gradU[1,1]=-gradU[0,0]
anim=part_animation(U0,gradU,FigSize=(7,5))Gradient de U = | 0.146713 0.582942 |
| 0.158214 -0.146713 |
Divergence div(U)= 0.0
Rotation W_z = -0.2123639551615078
volume initiale 0.020000000000000004
Animation avec 40

plt.rc('animation', html='jshtml')
animLoading...