Table des matières Python

Nappes de courant

1. Introduction

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 Laplace 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.

2. Une nappe de courant

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 :

plotAplotA.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 :

plotBplotB.pdf

Tracé du champ sur l'axe Oy :

figure()
y=laplace.get_y()
plot(y,Bx[:,2**(n-1)])
xlabel('y')
ylabel('Bx')
grid()
            
plotCplotC.pdf
laplace.close()
            

3. Deux nappes de courant opposées

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')
            
plotDplotD.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()
            
plotEplotE.pdf
figure()
y=laplace.get_y()
plot(y,Bx[:,2**(n-1)])
xlabel('y')
ylabel('Bx')
grid()
            
plotFplotF.pdf
laplace.close()
            
Creative Commons LicenseTextes et figures sont mis à disposition sous contrat Creative Commons.