Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Analyse de champ

Marc BUFFAT, dpt mécanique, Université Claude Bernard Lyon 1


Mise à disposition selon les termes de la

Licence Creative Commons


Licence Creative Commons.

ligne de courant
%matplotlib inline
import numpy as np
import scipy as sp
import matplotlib.pyplot as plt
from matplotlib import animation
from cinematique import part_animation

Analyse locale d’un champ

Etude locale de la trajectoire d’une particule fluide dans un champ de vitesse UU dont on se donne le gradient: gradU\mathbf{grad}\,U

  • Localement le champ de vitesse en X0+dXX_0+dX est:

u=u0+uxdx+uydyu = u_0 + \frac{\partial u}{\partial x} dx + \frac{\partial u}{\partial y} dy
v=v0+vxdx+vydyv = v_0 + \frac{\partial v}{\partial x} dx + \frac{\partial v}{\partial y} dy
U=U0+gradU×dX\vec{U} = \vec{U}_0 + \mathbf{grad}\,\vec{U} \times d\vec{X}
  • Les trajectoires des particules fluides M(t)=M0(0)+dM\vec{M}(t)=\vec{M}_0(0)+d\vec{M} vérifient:

dMdt=U(M)=U0+gradU×dM\frac{d \vec{M}}{dt} = \vec{U}(M) = \vec{U}_0 + \mathbf{grad}\,\vec{U} \times d\vec{M}
  • la rotation solide d’une particule (ex: Uθ=ωrU_\theta = \omega r)

Ω=12rotU\vec{\Omega} = \frac{1}{2} \mathbf{rot}\,\vec{U}
  • Le volume d’une particule varie comme la divergence du champ de vitesse divUdiv\,\vec{U}

1VdVdtdivU=trace(gradU)\frac{1}{V}\frac{dV}{dt} \equiv div\,\vec{U} = trace(\mathbf{grad}\,\vec{U})

Analyse locale d’un champ 2D

On se donne la valeur locale U0U_0 et son gradient gradU\mathbf{grad} U du champ de la vitesse.

Locallement en supposant que ce gradient est constant on peut écrire

U(x,y)=U0+gradU×[xx0yy0]\vec{U}(x,y) = \vec{U}_0 + \mathbf{grad}\, \vec{U} \times \begin{bmatrix} x-x_0 \\ y-y_0 \end{bmatrix}

Champ incompressible

divU=0div \, \vec{U} = 0

donc

trace(gradU)=0trace(\mathbf{grad} \vec{U}) = 0
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
<Figure size 700x500 with 2 Axes>
plt.rc('animation', html='jshtml')
anim
Loading...

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
<Figure size 700x500 with 2 Axes>
plt.rc('animation', html='jshtml')
anim
Loading...

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
<Figure size 700x500 with 2 Axes>
plt.rc('animation', html='jshtml')
anim
Loading...

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
<Figure size 700x500 with 2 Axes>
plt.rc('animation', html='jshtml')
anim
Loading...

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
<Figure size 700x500 with 2 Axes>
plt.rc('animation', html='jshtml')
anim
Loading...

###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
<Figure size 700x500 with 2 Axes>
plt.rc('animation', html='jshtml')
anim
Loading...

Cas Général d’un écoulement compressible

  • décomposition du champ de vitesse

U(M)=U(O)+(U)×OM\vec{U}(M) = \vec{U}(O) + (\nabla \vec{U})\times\vec{OM}
  • en partie anti-symétrique (rotation) et symétrique (déformation)

U(M)=U(O)+ΩOM+D\vec{U}(M) = \vec{U}(O) + \vec{\Omega} \wedge \vec{OM} + D
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
<Figure size 700x500 with 2 Axes>
plt.rc('animation', html='jshtml')
anim
Loading...

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
<Figure size 700x500 with 2 Axes>
plt.rc('animation', html='jshtml')
anim
Loading...

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
<Figure size 700x500 with 2 Axes>
plt.rc('animation', html='jshtml')
anim
Loading...

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
<Figure size 700x500 with 2 Axes>
plt.rc('animation', html='jshtml')
anim
Loading...

FIN