Table des matières Python

Diaphragme électrostatique

1. Système étudié

Le système électrostatique est constitué de trois disques conducteurs parallèles. Le disque central est percé d'un diaphragme circulaire. Le problème est à symétrie axiale. Il s'agit donc de résoudre l'équation de Laplace en coordonnées cylindriques pour le potentiel électrostatique :

1rr(rVr)+2Vz2=0(1)

Ce document présente la résolution numérique de l'équation de Laplace par la méthode des différences finies expliquée dans Équation de Poisson à deux dimensions. La discrétisation de l'équation est expliquée dans Discrétisation de l'équation de Poisson en géométrie axiale.

Pour le module Python utilisé voir : Équation de Poisson : module python.

../../../../figures/sciphys/elecmag/diaphragme/diaphragme.svgFigure pleine page

En l'absence d'ouverture dans le conducteur central, les champs électriques sont uniformes (on se place loin des bords). Deux cas sont à distinguer : soit les champs de part et d'autre du diaphragme sont de même sens (V0<V1<V2), soit ils sont de sens opposés (V1<V0<V2).

2. Champs de même sens

from matplotlib.pyplot import *
import math
import numpy
import poisson.main
            

On commence par définir un maillage de 256 mailles dans la direction de l'axe de symétrie z et 128 mailles dans la direction radiale r. Le maillage réduit comporte 32 par 16 mailles.

n=7
p=4
levels = n-p+1
laplace = poisson.main.PoissonAxial(p+1,p,levels,1.0,0.5,x0=-0.5,y0=0.0)
laplace.laplacien()
            

On impose une condition limite de dirichlet sur chaque plaque conductrice, avec des potentiels V1, V2=0 pour le diaphragme et V3. Sur le bord du cylindre, on impose une condition limite de Neumann nulle :

Vr=0(2)

Cette condition permet d'obtenir un champ uniforme en l'absence d'ouverture dans le conducteur central. On commence par définir une condition de Neumann sur tous les bords du domaine. Les conditions de Dirichlet sur les bords correspondant aux conducteurs viennent écraser les conditions de Neumann.

V1 = -1.0
V2 = 0.0
V3 = 5.0
rayon = 5
laplace.neumann_borders(0.0,0.0,0.0,0.0,0.0)
laplace.dirichlet_polygon(0,0,[0],[16],V1)
laplace.dirichlet_polygon(16,rayon,[0],[16-rayon],V2)
laplace.dirichlet_polygon(32,0,[0],[16],V3)
             

La discrétisation de l'équation de Poisson conduit à un système d'équations linéaires qui est résolu par la méthode itérative de Gauss-Seidel avec sur-relaxation.

result=laplace.opencl_iterations_norm(20,50,omega=1.9)
            
figure(figsize=(10,6))
plot(result[0],result[1]) 
xlabel('niter')  
ylabel('norm')
grid() 
            
plotAplotA.pdf

On récupère le potentiel et les composantes du champ électrique. Pour ces deux dernières, on récupère un tableau symétrique par rapport à l'axe.

V = laplace.get_array(symetry=1)
Er = -laplace.get_derivR(symetry=-1)
Ez = -laplace.get_derivZ(symetry=1)
z = laplace.get_z()
r = laplace.get_r(symetry=1) 
            

Tracé des lignes équipotentielles :

figure(figsize=(8,8))
extent = laplace.get_extent(symetry=True)
contour(V,40,extent=extent)
imshow(~laplace.get_mask(symetry=True),extent=extent,alpha=0.5, cmap=cm.gray)
xlabel('z')
ylabel('r')
grid()
            
plotBplotB.pdf

Tracé du champ Ez sur l'axe :

figure(figsize=(10,5))
plot(z,Ez[2**n,:])
xlabel('z')
ylabel('Ez')
grid()
            
plotCplotC.pdf

Tracé du champ Ez sur un axe rencontrant le conducteur central :

figure(figsize=(10,5))
plot(z,Ez[int(2**n*1.6),:])
xlabel('z')
ylabel('Ez')
grid()
            
plotDplotD.pdf

Tracé du champ Er sur un axe radial proche du diaphragme :

figure(figsize=(10,5))
plot(r,Er[:,2**n-2])
xlabel('r')
ylabel('Er')
grid()
            
plotEplotE.pdf
laplace.close()
             

3. Champs de sens opposés

n=7
p=4
levels = n-p+1
laplace = poisson.main.PoissonAxial(p+1,p,levels,1.0,0.5,x0=-0.5,y0=0.0)
laplace.laplacien()
V1 = -1.0
V2 = 0.0
V3 = -5.0
rayon = 5
laplace.neumann_borders(0.0,0.0,0.0,0.0,0.0)
laplace.dirichlet_polygon(0,0,[0],[16],V1)
laplace.dirichlet_polygon(16,rayon,[0],[16-rayon],V2)
laplace.dirichlet_polygon(32,0,[0],[16],V3)
result=laplace.opencl_iterations_norm(20,50,omega=1.9)
figure(figsize=(10,6))
plot(result[0],result[1]) 
xlabel('niter')  
ylabel('norm')
grid() 
         
plotFplotF.pdf

On récupère le potentiel et les composantes du champ électrique. Pour ces deux dernières, on récupère un tableau symétrique par rapport à l'axe (ou antisymétrique).

V = laplace.get_array(symetry=1)
Er = -laplace.get_derivR(symetry=-1)
Ez = -laplace.get_derivZ(symetry=1)
z = laplace.get_z()
r = laplace.get_r(symetry=1)
            

Tracé des lignes équipotentielles :

figure(figsize=(8,8))
extent = laplace.get_extent(symetry=True)
contour(V,40,extent=extent,color='r')
imshow(~laplace.get_mask(symetry=True),extent=extent,alpha=0.5, cmap=cm.gray)
xlabel('z')
ylabel('r')
grid()
            
plotGplotG.pdf

Tracé du champ Ez sur l'axe :

figure(figsize=(10,5))
plot(z,Ez[2**n,:])
xlabel('z')
ylabel('Ez')
grid()
            
plotHplotH.pdf

Tracé du champ Ez sur un axe rencontrant le conducteur central :

figure(figsize=(10,5))
plot(z,Ez[int(2**n*1.6),:])
xlabel('z')
ylabel('Ez')
grid()
            
plotIplotI.pdf

Tracé du champ Er sur un axe radial proche du diaphragme :

figure(figsize=(10,5))
plot(r,Er[:,2**n-2])
xlabel('r')
ylabel('Er')
grid()
            
plotJplotJ.pdf
laplace.close()
             
Creative Commons LicenseTextes et figures sont mis à disposition sous contrat Creative Commons.