Table des matières Python

Bobine épaisse

1. Introduction

On considère une bobine à symétrie axiale, modélisée par une densité de courant volumique.

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

Le potentiel vecteur vérifie l'équation de Poisson en coordonnées cylindriques :

Le champ magnétique (rotationnel du potentiel vecteur) est :

Ce document présente la résolution numérique de l'équation de Poisson 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 vectorielle.

Le module python utilisé est présenté dans Équation de Poisson : programme Python.

2. Bobine de faible longueur

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

Le maillage comporte 256 mailles dans la direction de l'axe de symétrie z et 128 mailles dans la direction radiale. Pour définir les objets, on utilise un maillage réduit de 32 par 16 mailles. On commence par créer le maillage, discrétiser le laplacien et fixer des conditions limites de Dirichlet sur les bords du domaine (potentiel nul sur les bords).

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

Pour définir le courant (la source), on se place sur le maillage réduit de 32 par 4 mailles. La source est un carré (intersection de la bobine avec le plan méridien).

bobine.source_rect(16,4,1,1,-1.0)
            

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=bobine.opencl_iterations_norm(20,50,omega=1.95)
            

Le tracé de la norme en fonction du nombre d'itérations permet de suivre la convergence :

figure(figsize=(8,5))
plot(result[0],result[1]) 
xlabel('niter')  
ylabel('norm')
grid() 
            
plotAplotA.pdf

On récupère le potentiel et les composantes du champ magnétique. L'argument symetry permet d'obtenir le champ sur un domaine comportant aussi les valeurs négatives de r. Lorsqu'il vaut 1, le champ obtenu est pair. Lorsqu'il vaut -1, le champ est impair.

Atheta=bobine.get_array(symetry=-1)
Br=-bobine.get_derivZ(symetry=-1)
Bz=bobine.get_derivRUR(symetry=1)
            

Tracé des lignes d'égale valeur du potentiel

figure(figsize=(8,8))
extent=bobine.get_extent()
contour(Atheta,20,extent=bobine.extent,color='r')
imshow(~bobine.get_mask(symetry=1),extent=extent,alpha=0.5, cmap=cm.gray)
xlabel('z')
ylabel('r')
grid()
            
plotBplotB.pdf

Tracé du champ sur l'axe :

  
figure(figsize=(10,5))
plot(bobine.get_z(),Bz[128,:])
xlabel('z')
ylabel('Bz')
grid()
            
plotCplotC.pdf

Tracé du champ dans le plan z=0 :

figure(figsize=(10,5))
plot(bobine.get_r(symetry=1),Bz[:,128])
xlabel('r')
ylabel('Bz')
grid()
            
plotDplotD.pdf

On sauvegarde les résultats dans des fichiers textes pour une utilisation ultérieure.

numpy.savetxt("bobine-1-Atheta.txt",bobine.get_array(symetry=-1))
numpy.savetxt("bobine-1-AthetaDr.txt",bobine.get_derivR(symetry=1))
numpy.savetxt("bobine-1-AthetaDz.txt",bobine.get_derivZ(symetry=-1))
numpy.savetxt("bobine-1-Br.txt",Br)
numpy.savetxt("bobine-1-Bz.txt",Bz)
numpy.savetxt("bobine-1-r.txt",bobine.get_r(symetry=1))
numpy.savetxt("bobine-1-z.txt",bobine.get_z())
bobine.close()
            

3. Bobine longue

n=7
p=4
levels = n-p+1
bobine=poisson.main.PoissonAxialVect(p+1,p,levels,1.0,1.0,x0=-0.5,y0=-0.5)
bobine.laplacien()
bobine.dirichlet_borders(0.0)
bobine.source_rect(16,4,5,1,-1.0)
result=bobine.opencl_iterations_norm(20,50,omega=1.95)
figure(figsize=(8,5))
plot(result[0],result[1]) 
xlabel('niter')  
ylabel('norm')
grid() 
            
plotEplotE.pdf
figure(figsize=(8,8))
extent=bobine.get_extent()
contour(Atheta,20,extent=bobine.extent,color='r')
imshow(~bobine.get_mask(symetry=1),extent=extent,alpha=0.5, cmap=cm.gray)
xlabel('z')
ylabel('r')
grid()
            
plotFplotF.pdf
  
figure(figsize=(10,5))
plot(bobine.get_z(),Bz[128,:])
xlabel('z')
ylabel('Bz')
grid()
            
plotGplotG.pdf
figure(figsize=(10,5))
plot(bobine.get_r(symetry=1),Bz[:,128])
xlabel('r')
ylabel('Bz')
grid()
            
plotHplotH.pdf
numpy.savetxt("bobine-2-Atheta.txt",bobine.get_array(symetry=-1))
numpy.savetxt("bobine-2-AthetaDr.txt",bobine.get_derivR(symetry=1))
numpy.savetxt("bobine-2-AthetaDz.txt",bobine.get_derivZ(symetry=-1))
numpy.savetxt("bobine-2-Br.txt",Br)
numpy.savetxt("bobine-2-Bz.txt",Bz)
numpy.savetxt("bobine-2-r.txt",bobine.get_r(symetry=1))
numpy.savetxt("bobine-2-z.txt",bobine.get_z())
            
bobine.close()            
            
Creative Commons LicenseTextes et figures sont mis à disposition sous contrat Creative Commons.