Ce document présente le calcul du champ magnétique créé par un ou plusieurs aimants permanents et le calcul de la force d'interaction entre deux aimants.
Dans cette partie, on considère le problème général du champ magnétique créé par un aimant permanent, en l'absence de tout courant électrique.
Les matériaux ferromagnétiques peuvent posséder une aimantation en l'absence de source de champ extérieur. Un aimant permanent est défini comme un volume (V) en tout point duquel la densité volumique de moment magnétique (l'aimantation), est supposée connue et constante.
Le champ d'aimantation est équivalent à un vecteur densité de courant électrique égal au rotationnel de l'aimantation ([1]). En régime quasi stationnaire, le champ magnétique créé par l'aimant obéit donc à l'équation de Maxwell-Ampère à laquelle ce courant équivalent est ajouté :
où est la densité de courant électrique, qui est nulle dans le problème considéré ici.
L'équation est une version de l'équation de Maxwell-Ampère (en régime quasi stationnaire) valable dans la matière et faisant intervenir des champs moyens, c'est-à-dire des champ moyennés dans l'espace sur une échelle beaucoup plus grande que l'échelle atomique
La propriété de conservation du flux magnétique reste valable pour le champ moyen :
On définit le vecteur excitation magnétique par :
L'équation s'écrit alors :
et la conservation du flux magnétique :
Le vecteur excitation magnétique s'exprime en A/m. Il est parfois nommé champ magnétique et dans ce cas le vecteur est désigné comme le vecteur densité de flux magnétique, qui est une dénomination tout à fait correcte, ou bien induction magnétique, qui est plus discutable. Dans les problèmes de magnétostatique dans le vide, le vecteur n'a pas d'intérêt et il est d'usage de désigner le vecteur comme étant le champ magnétique. Nous préférons garder cette dénomination et désigner par excitation magnétique.
En l'absence de courant électrique, les deux équations vérifiées par l'excitation magnétique sont :
Ces deux équations sont similaires à celles vérifiées par le champ électrostatique. Cela nous amène à définir une densité de charge magnétique (par analogie avec la densité volumique de charge électrique) par :
Plus précisément, si le champ électrostatique est analogue à l'excitation magnétique, ρm et analogue à ρ/ε0.
Soit S la surface fermée qui délimite le volume V de l'aimant. En principe, l'aimantation, qui est un champ moyen défini à l'échelle mésoscopique, devrait varier continûment lorsqu'on passe de l'intérieure de l'aimant à l'extérieur. Cependant, la distance sur laquelle se fait la variation de l'aimantation au voisinage de la surface est négligeable à l'échelle macroscopique. Il peut donc être intéressant, pour des raisons de simplicité du modèle, de considérer que l'aimantation est non nulle dans le volume V et nulle en dehors de ce volume (dans l'air qui entoure l'aimant). En conséquence, il subit une discontinuité sur la surface S et sa divergence n'est donc pas définie sur cette surface. Ce problème est résolu en considérant l'intégrale de la densité de charge magnétique sur le volume :
où est le vecteur normal sortant du volume V. Une densité surfacique de charge magnétique doit donc être introduite sur la surface de l'aimant, définie par :
où désigne la normale de la surface de l'aimant dans le sens sortant.
Par analogie avec le champ électrostatique, nous pouvons écrire l'excitation magnétique en un point P de l'espace sous la forme d'une intégrale sur le volume de l'aimant plus une intégrale sur sa surface :
où Q désigne un point quelconque du volume ou de la surface. Cette relation permet de calculer l'excitation magnétique générée par un ou plusieurs aimants permanents. Cependant, elle ne permet pas de la calculer en présence de parties ferromagnétiques qui ne sont pas aimantées de manière permanente (par exemple les noyaux de bobines en fer doux) car l'aimantation de ces parties n'est pas connue a priori.
Pour un barreau aimanté, on considère généralement que l'aimantation est uniforme dans le barreau. On supposera donc que l'aimantation est uniforme dans l'aimant. Dans ce cas, il reste seulement l'intégrale sur la surface :
L'excitation en un point P étant connue, le champ magnétique s'en déduit par :
L'équation permet de faire un calcul direct de l'excitation magnétique par un calcul d'intégrale de surface.
Une autre manière d'aborder le problème consiste à introduire un potentiel magnétique. En effet, le rotationnel de l'excitation magnétique étant nul en l'absence de courants électriques, il existe un potentiel tel que :
L'opérateur divergence appliquée à cette équation conduit à l'équation :
où Δ est l'opérateur laplacien. Il s'agit de l'équation de Poisson, similaire à l'équation de Poisson pour le potentiel électrostatique. Cette équation n'a de sens que si la charge magnétique est définie, autrement dit si la divergence de l'aimantation est définie en tout point. Il faudra donc adopter un modèle qui respecte cette condition, ce qui exclue l'introduction d'une charge magnétique surfacique.
Il faut aussi écrire les conditions limites à la frontière entre l'air et l'aimant. L'équation implique la continuité de la composante normale du champ magnétique. Dans le cas où l'aimantation est discontinue à l'interface aimant-air, si désigne le vecteur normal dirigé de l'aimant vers l'air, cette condition s'écrit :
La composante normale de l'excitation magnétique a donc une discontinuité égale à l'aimantation sur la surface.
Si l'aimantation varie continûment entre l'aimant et l'air, la continuité de la composante normale du champ magnétique et de l'aimantation implique la continuité de la composante normale de l'excitation magnétique.
L'équation implique la continuité de la composante tangentielle :
L'équation de Poisson peut être résolue numériquement avec une condition limite de potentiel nul sur les bords du domaine, qui doit être de très grande taille par rapport à l'aimant. Une méthode de discrétisation par différence finie associée à une méthode de résolution multigrille devrait constituer un moyen très efficace de résoudre numériquement cette équation.
Le barreau aimanté est cylindrique, d'axe (Oz). Sa section droite peut être circulaire ou rectangulaire. On suppose que l'aimantation dans le volume du barreau est uniforme et dirigée selon l'axe (Oz) :
On s'intéresse aux faces sud et nord du barreau, respectivement situées en z=zs et z=zn car c'est dans leur voisinage qu'une charge magnétique est présente.
Si l'on souhaite effectuer un calcul direct de l'excitation magnétique par la relation , il est intéressant de supposer que lorsqu'on traverse la face sud ou la face nord de l'aimant, l'aimantation subit une discontinuité en passant de 0 à M ou inversement. Comme expliqué plus haut, cette discontinuité introduit une charge de surface, ce qui permet de ramener le calcul direct de l'excitation magnétique à un calcul d'intégrale sur une surface. La densité surfacique de charge magnétique sur la face nord est σo=M et sur la face sud -σo.
Figure pleine pageLe calcul de l'excitation magnétique se fait pour chaque face. Par exemple pour la face nord :
Pour appliquer la méthode de l'équation de Poisson , il faut considérer que l'aimantation varie continument à la traversée de la face sud ou nord. Le modèle le plus simple consiste à supposer que la divergence, c'est-à-dire la dérivée de Mz par rapport à z est uniforme sur une épaisseur δ est nulle en dehors.
Figure pleine pageLa densité volumique de charge magnétique dans la couche d'épaisseur δ de la face nord est :
et l'opposée dans la couche de la face sud. La densité volumique est nulle en dehors de ces deux couches. L'épaisseur δ doit être très petite devant la longueur du barreau.
L'aimantation varie continûment entre l'intérieur de l'aimant et l'extérieur donc l'excitation magnétique varie continûment. La résolution de l'équation de Poisson se fait donc dans un seul domaine.
L'équation de Poisson doit être discrétisée sur une grille. L'épaisseur minimale (et suffisante) de la couche chargée se réduit au nœuds de la grille qui sont sur la face, ce qui finalement revient à considérer que la charge est surfacique.
On cherche à calculer la résultante des forces magnétiques sur un barreau aimanté. Celle-ci est l'intégrale suivante sur le volume de l'aimant :
L'aimant considéré n'exerce aucune force sur lui-même donc ce calcul peut être fait en considérant le champ magnétique créé par les autres aimants. Considérons le cas (développé plus loin) où les aimants sont des cyclindres de révolution coaxiaux. La résultante est alors dans la direction (Oz) et s'écrit :
où un point de l'aimant est repéré par ses coordonnées cylindriques (r,θz). On obtient finalement deux intégrales de surface, l'une sur la face nord l'autre sur la face sud :
Plus généralement, la résultante des forces sur un aimant (aimanté uniformément) s'écrit comme une intégrale sur sa surface :
On s'intéresse au cas particulier d'un aimant ou de deux aimants cylindriques de section circulaire, alignés sur le même axe.
Figure pleine pageUn point P est repéré par ses coordonnées cylindriques (r,θ,z). Tout plan contenant l'axe (Oz) est un plan de symétrie de l'aimantation (vecteur axial). En conséquence, c'est aussi un plan de symétrie de l'excitation magnétique (vecteur axial). Il y a par ailleurs invariance par rotation autour de l'axe. Il s'en suit que :
Le calcul direct de l'excitation magnétique consiste, pour chaque face des aimants, à calculer l'intégrale . Il faut calculer l'intégrale pour chaque face (2 faces pour un aimant, 4 faces pour deux aimants) et sommer les champs obtenus pour obtenir le champ complet. Voyons comme se fait le calcul de l'intégrale pour une face d'un aimant de rayon a, c'est-à-dire un disque de rayon a. La densité de charge magnétique sur cette face est σm=M ou σm=-M selon qu'il s'agit de la face nord ou de la face sud de l'aimant d'aimantation M.
L'intégrale s'écrit :
Le rapport est sans dimensions. En conséquence, le rayon et la longueur de l'aimant peuvent être exprimés dans l'unité que l'on souhaite, par exemple le millimètre.
Pour expliciter cette intégrale, on peut considérer que θ=0. Notons (r1,θ1,z1) les coordonnées cylindriques du point Q situé sur une face.
On a :
L'élément de surface s'écrit dS=r1dθ1dr1. Les deux composantes de l'excitation magnétique s'écrivent donc :
Pour calculer numériquement ces intégrales, on doit effectuer un maillage du demi-disque de rayon a. L'angle θ1 est échantillonné de la manière uniforme :
Pour le rayon r1, il est préférable de choisir un échantillonnage qui permette d'avoir des mailles d'aire constante entre le centre et les bords du disque. Celui-ci devrait convenir :
La figure suivante représente la maille (i,i+1,j,j+1) :
Figure pleine pageSon aire est :
Toutes les mailles ont bien la même aire.
Les approximations des intégrales sont obtenues en considérant que l'intégrale sur une maille est égale à l'aire de la maille multipliée par la valeur de la fonction intégrée au centre de la maille.
Il peut être intéressant de valider ce calcul en comparant Hz à son expression sur l'axe (Oz), qui admet une forme analytique :
De part et d'autre de la surface, on a :
ce qui confirme la discontinuité de la composante normale de l'excitation magnétique, égale à l'aimantation M.
Numpy permet de faire des calculs de somme double très rapidement. Pour cela, on utilise tout d'abord la fonction numpy.meshgrid, qui permet de crééer une grille à partir de deux tableaux. Par exemple, pour créer une grille définie par xi=i et yj=j avec 3 points sur chaque axe, on écrit :
import numpy as np x = [0,1,2] y = [0,1,2] xx,yy = np.meshgrid(x,y)
print(xx) --> array([[0, 1, 2], [0, 1, 2], [0, 1, 2]])
print(yy) --> array([[0, 0, 0], [1, 1, 1], [2, 2, 2]])
Le tableau xx contient les valeurs de x pour les points de la grille, le tableau yy contient les valeurs de y. L'évaluation d'une fonction a deux variables sur cette grille se fait alors de la manière suivante (pour une fonction universelle) :
def f(x,y): return x+y z = f(xx,yy)
print(z) --> array([[0, 1, 2], [1, 2, 3], [2, 3, 4]])
La somme des valeurs sur les nœuds de la grille se calcule aisément :
print(z.sum()) --> 18
Les fonctions suivantes effectuent le calcul des sommes et :
def HrHz(r,z,z1,rr,tt,deltaS,M): b2 = (z-z1)**2 cos = np.cos(tt); D = (r**2+rr**2-2*r*rr*cos+b2)**1.5 Hr = (r-rr*cos)/D Hz = (z-z1)/D Hr = Hr.sum()*deltaS/(2*np.pi)*M Hz = Hz.sum()*deltaS/(2*np.pi)*M return (Hr,Hz) def grille(Nr,Ntheta,a): delta_theta = np.pi/Ntheta delta_r = a/np.sqrt(Nr) theta1 = (0.5+np.arange(Ntheta))*delta_theta r1 = np.sqrt(0.5+np.arange(Nr))*delta_r deltaS = delta_theta*delta_r**2*0.5 rr,tt = np.meshgrid(r1,theta1) return (rr,tt,deltaS) def champH(Nr,Ntheta,r,z,z1,a,M): (rr,tt,deltaS) = grille(Nr,Ntheta,a) return HrHz(r,z,z1,rr,tt,deltaS,M)
Voici un exemple :
Nr = 100 Ntheta = 50 a = 1 z = 1 z1 = 0 r = 0 M = 1 (Hr,Hz) = champH(Nr,Ntheta,r,z,z1,a,M)
print((Hr,Hz)) --> (0.0, 0.14644532315842412)
Pour comparaison, la fonction suivante calcule le champ sur l'axe, défini par :
def Hz_axe(z,z1,a,M): return M/2*((z-z1)/abs(z-z1)-(z-z1)/(a**2+(z-z1)**2)**0.5) Hz = Hz_axe(z,z1,a,M)
print(Hz) --> 0.14644660940672627
Pour faire une comparaison plus complète, traçons Hz en fonction de z pour r=0 :
from matplotlib.pyplot import * z = np.linspace(0.01,5,100) Nr = 100 Ntheta = 50 a = 1 z1 = 0 r = 0 M = 1 (rr,tt,deltaS) = grille(Nr,Ntheta,a) Hz1 = np.zeros(len(z)) for k in range(len(z)): Hr,Hz1[k] = HrHz(r,z[k],z1,rr,tt,deltaS,M) Hz2 = Hz_axe(z,z1,a,M) figure() plot(z,Hz1,"r-",label='approché') plot(z,Hz2,"k",label='exact') grid() xlabel('z') ylabel('Hz') legend(loc='upper right') ylim(0,1)Hz-axe-1face.pdf
Pour cette taille de grille, le calcul approché de l'intégrale donne un résultat convenable sauf à petite distance du disque. À très petite distance du disque, la fonction à intégrer prend des valeurs très grandes lorsque le point Q se trouve proche de P et elle varie beaucoup lorsqu'il s'éloigne de cette position. Pour améliorer la précision du calcul de l'intégrale, il faut augmenter la finesse de la subdivision de r :
z = np.logspace(-4,-2,10) Nr = 1000 Ntheta = 50 a = 1 z1 = 0 r = 0 M = 1 (rr,tt,deltaS) = grille(Nr,Ntheta,a) Hz1 = np.zeros(len(z)) for k in range(len(z)): Hr,Hz1[k] = HrHz(r,z[k],z1,rr,tt,deltaS,M) Hz2 = Hz_axe(z,z1,a,M) figure() plot(z,Hz1,"r-",label='approché') plot(z,Hz2,"k",label='exact') grid() xlabel('z') ylabel('Hz') legend(loc='upper right') xscale('log')Hz-axe-1face-2.pdf
Une augmentation d'un facteur 100 du nombre de points selon r permet bien d'augmenter la précision, mais à très courte distance, il y a toujours une divergence de l'intégrale.
Il faut donc adapter le nombre Nr à la distance z et ne pas faire le calcul à une distance trop petite. Il faut trouver un critère pour choisir ce nombre. On peut par exemple considérer que le rayon de la maille centrale doit être de l'ordre de z/p, où p est un paramètre à ajuster. Cette condition conduit à :
mais Nr ne doit pas descendre en dessous d'une certaine valeur.
z = np.linspace(0.01,5,100) Ntheta = 50 a = 1 z1 = 0 r = 0 M = 1 Hz1 = np.zeros(len(z)) p = 3 Nr_min = 10 for k in range(len(z)): Nr = max(int((p*a/abs(z[k]))**2),Nr_min) (rr,tt,deltaS) = grille(Nr,Ntheta,a) Hr,Hz1[k] = HrHz(r,z[k],z1,rr,tt,deltaS,M) Hz2 = Hz_axe(z,z1,a,M) figure() plot(z,Hz1,"r-",label='approché') plot(z,Hz2,"k",label='exact') grid() xlabel('z') ylabel('Hz') legend(loc='upper right') ylim(0,1)Hz-axe-1face-3.pdf
Il reste à savoir si la méthode fonctionne aussi lorsque le point P est proche du disque mais hors de l'axe. L'aire de la maille qui se trouve au plus proche du point P a la même aire quelle que soit la position de P. On peut donc raisonnablement s'attendre à un calcul approché correct également dans ce cas.
Traçons les composantes Hr et Hz ainsi que la norme de H, en fonction de r, pour une distance z petite :
r = np.linspace(0,2,50) z = 1e-1 a = 1 z1 = 0 M = 1 Hz1 = np.zeros(len(r)) Hr1 = np.zeros(len(r)) Nr_min = 10 p = 2 Nr = max(int((p*a/abs(z))**2),Nr_min) (rr,tt,deltaS) = grille(Nr,Ntheta,a) for k in range(len(r)): Hr1[k],Hz1[k] = HrHz(r[k],z,z1,rr,tt,deltaS,M) H1 = np.sqrt(Hr1**2+Hz1**2) Hz2 = np.zeros(len(r)) Hr2 = np.zeros(len(r)) p = 3 Nr = max(int((p*a/abs(z))**2),Nr_min) (rr,tt,deltaS) = grille(Nr,Ntheta,a) for k in range(len(r)): Hr2[k],Hz2[k] = HrHz(r[k],z,z1,rr,tt,deltaS,M) H2 = np.sqrt(Hr2**2+Hz2**2) figure() subplot(311) plot(r,Hr1,'r-') plot(r,Hr2,'b-') ylabel('Hr') grid() subplot(312) plot(r,Hz1,'r-') plot(r,Hz2,'b-') ylabel('Hz') grid() subplot(313) plot(r,H1,'r') plot(r,H2,'b-') ylabel('H') xlabel('r') grid()HrHz-prox-1face.pdf
Comme souvent en calcul numérique, le moyen le plus simple de vérifier que le calcul est assez précis est de faire varier le paramètre qui contrôle la précision, ici p, et de comparer les résultats. Les deux courbes précédentes sont calculées pour p=2 et p=3. La valeur p=2 semble suffisante.
Dans l'objectif de tracer des lignes de champ, la méthode de calcul directe semble intéressante, à condition de démarrer les lignes de champ à une distance pas trop petite des faces des aimants. À grande distance, le calcul précis se fait avec une faible complexité.
Le calcul du champ créé par un aimant est fait par la fonction suivante, qui renvoie les composantes de et de . L'aimant est caractérisé par son rayon a, les côtes de ses faces zs et zn et son aimantation M.
def champAimant(r,z,a,zs,zn,M,mu0=1): p = 3 Nr_min = 10 Ntheta = 50 Nr = Nr_min if abs(r)<=a: Nr = max(int((p*a/abs(z-zs))**2),Nr_min) (rr,tt,deltaS) = grille(Nr,Ntheta,a) (Hr1,Hz1) = HrHz(r,z,zs,rr,tt,deltaS,-M) Nr = Nr_min if abs(r)<=a: Nr = max(int((p*a/abs(z-zn))**2),Nr_min) (rr,tt,deltaS) = grille(Nr,Ntheta,a) (Hr2,Hz2) = HrHz(r,z,zn,rr,tt,deltaS,M) Br1 = mu0*Hr1 Br2 = mu0*Hr2 if abs(r)<a and z>min(zs,zn) and z<max(zs,zn): Bz1 = mu0*(Hz1+M) Bz2 = mu0*(Hz2+M) else: Bz1 = mu0*Hz1 Bz2 = mu0*Hz2 return (Hr1+Hr2,Hz1+Hz2,Br1+Br2,Bz1+Bz2)
La fonction suivante permet de dessiner une flèche au milieu d'une ligne.
def fleche(x,y,sens,long,style='k-'): n = len(x)//2 xa = x[n] xb = x[n+sens] ya = y[n] yb = y[n+sens] z = (xb-xa)+1j*(yb-ya) phi = np.angle(z) a = np.pi/2+np.pi/3 xc = xb+long*np.cos(phi-a) yc = yb+long*np.sin(phi-a) xd = xb+long*np.cos(phi+a) yd = yb+long*np.sin(phi+a) plot([xb,xc],[yb,yc],style) plot([xb,xd],[yb,yd],style)
Le tracé d'une ligne de champ de l'excitation magnétique se fait en partant d'un point à proximité d'une face, jusqu'à un point à proximité d'une face ou bien jusqu'à sortie d'un rectangle centré sur l'aimant. Il faut remarquer que le choix de la valeur de M et de μ0 n'a aucune influence sur les lignes de champ.
def ligneH(a,zs,zn,M,ri,zi,sens,rmax,zmax,dmin): ds = 0.01*sens r = ri z = zi ligne_z = [] ligne_r = [] continuer = True while continuer: ligne_z.append(z) ligne_r.append(r) (Hr,Hz,Br,Bz) = champAimant(r,z,a,zs,zn,M) H = np.sqrt(Hr**2+Hz**2) r += Hr/H*ds z += Hz/H*ds if (abs(z-zs) < dmin and abs(r)<a) or (abs(z-zn)< dmin and abs(r)<a) or (abs(r)>rmax) or (abs(z)>zmax) : continuer=False return (np.array(ligne_r),np.array(ligne_z)) a=1 M = 1 zs=-2 zn=2 ds = 0.05 figure(figsize=(8,8)) zmax = 10 rmax = 10 longfleche = 0.2 dmin = 0.1 # distance minimale d'approche des faces for ri in [0,0.2,0.4,0.6,0.8,1.0]: sens = 1 ligne_r,ligne_z = ligneH(a,zs,zn,M,ri,zn+dmin,sens,rmax,zmax,dmin) plot(ligne_z,ligne_r,'b-') fleche(ligne_z,ligne_r,sens,longfleche,style='b-') plot(ligne_z,-ligne_r,'b-') fleche(ligne_z,-ligne_r,sens,longfleche,style='b-') sens = -1 ligne_r,ligne_z = ligneH(a,zs,zn,M,ri,zs-dmin,sens,rmax,zmax,dmin) plot(ligne_z,ligne_r,'b-') fleche(ligne_z,ligne_r,sens,longfleche,style='b-') plot(ligne_z,-ligne_r,'b-') fleche(ligne_z,-ligne_r,sens,longfleche,style='b-') sens = 1 ligne_r,ligne_z = ligneH(a,zs,zn,M,ri,zn-dmin,sens,rmax,zmax,dmin) plot(ligne_z,ligne_r,'b-') fleche(ligne_z,ligne_r,sens,longfleche,style='b-') plot(ligne_z,-ligne_r,'b-') fleche(ligne_z,-ligne_r,sens,longfleche,style='b-') axis('equal') xlabel('z') ylabel('r') xlim(-zmax,zmax) ylim(-rmax,rmax) plot([-zs,zs,zs,-zs,-zs],[a,a,-a,-a,a],'r-') grid() title('Lignes de H')aimant-ligneH.pdf
def ligneB(a,zs,zn,M,ri,zi,sens,rmax,zmax,dmin): ds = 0.01*sens r = ri z = zi ligne_z = [] ligne_r = [] continuer = True while continuer: ligne_z.append(z) ligne_r.append(r) (Hr,Hz,Br,Bz) = champAimant(r,z,a,zs,zn,M) B = np.sqrt(Br**2+Bz**2) r += Br/B*ds z += Bz/B*ds if (abs(z-zs) < dmin and abs(r)<a) or (abs(z-zn)< dmin and abs(r)<a) or (abs(r)>rmax) or (abs(z)>zmax) : continuer=False return (np.array(ligne_r),np.array(ligne_z))
figure(figsize=(8,8)) for ri in [0,0.2,0.4,0.6,0.8,1.0]: sens = 1 ligne_r,ligne_z = ligneB(a,zs,zn,M,ri,zn+dmin,sens,rmax,zmax,dmin) plot(ligne_z,ligne_r,'b-') fleche(ligne_z,ligne_r,sens,longfleche,style='b-') plot(ligne_z,-ligne_r,'b-') fleche(ligne_z,-ligne_r,sens,longfleche,style='b-') sens = -1 ligne_r,ligne_z = ligneB(a,zs,zn,M,ri,zs-dmin,sens,rmax,zmax,dmin) plot(ligne_z,ligne_r,'b-') fleche(ligne_z,ligne_r,sens,longfleche,style='b-') plot(ligne_z,-ligne_r,'b-') fleche(ligne_z,-ligne_r,sens,longfleche,style='b-') sens = -1 ligne_r,ligne_z = ligneB(a,zs,zn,M,ri,zn-dmin,sens,rmax,zmax,dmin) plot(ligne_z,ligne_r,'b-') fleche(ligne_z,ligne_r,sens,longfleche,style='b-') plot(ligne_z,-ligne_r,'b-') fleche(ligne_z,-ligne_r,sens,longfleche,style='b-') axis('equal') xlabel('z') ylabel('r') xlim(-zmax,zmax) ylim(-rmax,rmax) plot([-zs,zs,zs,-zs,-zs],[a,a,-a,-a,a],'r-') grid() title('Lignes de B')aimant-ligneB.pdf
On cherche à calculer la force exercée sur un aimant par un autre aimant coaxial. Cette force s'écrit comme une intégrale sur les deux faces de l'aimant :
où est le champ créé par l'autre aimant.
Voyons comment calculer une force sans dimensions. Soit M l'unité dans laquelle les moments magnétiques sont exprimés. Si l'on pose , le champ magnétique obtenu est sans dimensions et son unité est :
Si L est l'unité de longueur, l'unité de la force est :
def force2Aimants(a1,zs1,zn1,a2,zs2,zn2,M1,M2,N,mu0=1): r1 = np.arange(N)*a1/N dr1 = r1[1]-r1[0] Fz = 0 for k in range(N): (Hra,Hza,Bra,Bza) = champAimant(r1[k],zn1,a2,zs2,zn2,M2,mu0) (Hrb,Hzb,Brb,Bzb) = champAimant(r1[k],zs1,a2,zs2,zn2,M2,mu0) Fz += Bza-Bzb Fz *= 2*np.pi*M1*dr1*r1[k] return Fz
a1 = a2 = 5 # en mm L1 = L2 = 20 # en mm mu0M = 1 # en teslas F0 = (mu0M)**2/(4*np.pi*1e-7)*(1e-3)**2 zn1 = 0 zs1 = zn1-L1 zs2 = np.linspace(0.1,20,20) # en mm zn2 = zs2+L2 Fz = np.zeros(len(zs2)) for k in range(len(zs2)): Fz[k] = force2Aimants(a1,zs1,zn1,a2,zs2[k],zn2[k],1,1,100) figure() plot(zs2,Fz) grid() xlabel("distance (mm)") ylabel(r"$F_z/F_0$",fontsize=18)fig7.pdf
print(F0) --> 0.7957747154594766