Ce document montre le calcul numérique du champ magnétique créé par des nappes de courant planes.
Le potentiel vecteur vérifie l'équation de Poisson :
On se place dans le cas d'un problème bidimensionnel, où la densité de courant est selon l'axe Oz et indépendante de z. L'équation de Poisson devient alors :
Le champ magnétique est obtenu par
Les lignes de champ magnétique sont définies par la relation différentielle :
qui devient :
Les lignes de champs sont donc les lignes d'égales valeurs de Az
On considère une nappe de courant, c'est-à-dire un courant localisé sur une plaque très mince.
L'équation de Poisson pour le potentiel est résolue numériquement par la méthode des différences finies et la méthode itérative de Gauss-Seidel.
Le module python utilisé est décrit dans Équation de Poisson : programme Python.
La nappe sera représentée par un segment sur le maillage. La conditions limite sur les bords du domaine est Az=0.
Le maillage carré comporte 256 par 256 mailles. Le segment représentant la nappe de courant est placé au milieu, parallèle à l'axe Ox. Il est défini sur un maillage réduit de 16 par 16 mailles.
from matplotlib.pyplot import *
import math
import numpy
import poisson.main
n=8
p=4
levels = n-p+1
laplace=poisson.main.Poisson(p,p,levels,1.0,1.0,-0.5,-0.5)
laplace.laplacien()
laplace.dirichlet_borders(0.0)
laplace.source_polygon(6,8,[4],[0],1.0)
result=laplace.opencl_iterations_norm(50,50,omega=1.9)
figure(figsize=(8,4))
plot(result[0],result[1])
xlabel('niter')
ylabel('norm')
La norme de la matrice des valeurs de Az permet de contrôler la convergence des itérations :
plotA.pdf
Az=laplace.get_array()
Bx=laplace.get_derivY()
By=-laplace.get_derivX()
figure(figsize=(8,8))
extent = laplace.get_extent()
contour(Az,30,extent=extent)
imshow(~laplace.get_mask(),extent=extent,alpha=0.5, cmap=cm.gray)
xlabel('x')
ylabel('y')
grid()
Tracé des lignes de champ :
plotB.pdf
Tracé du champ sur l'axe Oy :
figure()
y=laplace.get_y()
plot(y,Bx[:,2**(n-1)])
xlabel('y')
ylabel('Bx')
grid()
plotC.pdf
laplace.close()
Cette configuration permet de modéliser une bobine ou bien un aimant permanent aimanté dans la direction (Ox).
n=8
p=4
levels = n-p+1
laplace=poisson.main.Poisson(p,p,levels,1.0,1.0,-0.5,-0.5)
laplace.laplacien()
laplace.dirichlet_borders(0.0)
laplace.source_polygon(6,9,[4],[0],1.0)
laplace.source_polygon(6,7,[4],[0],-1.0)
result=laplace.opencl_iterations_norm(50,50,omega=1.9)
figure(figsize=(8,4))
plot(result[0],result[1])
xlabel('niter')
ylabel('norm')
plotD.pdf
Az=laplace.get_array()
Bx=laplace.get_derivY()
By=-laplace.get_derivX()
figure(figsize=(8,8))
extent = laplace.get_extent()
contour(Az,30,extent=extent)
imshow(~laplace.get_mask(),extent=extent,alpha=0.5, cmap=cm.gray)
xlabel('x')
ylabel('y')
grid()
plotE.pdf
figure()
y=laplace.get_y()
plot(y,Bx[:,2**(n-1)])
xlabel('y')
ylabel('Bx')
grid()
plotF.pdf
laplace.close()