🖥️ Piège à neutrons ★★

Notebook Capytale de cet exercice : 4195-11915977

Un piège à neutrons constitué de 6 fils rectilignes infinis, répartis aux sommets d’un hexagone régulier de rayon 𝑎=1 cm et parcourus par des courants de même intensité 𝐼=200 A, est représenté ci-dessous. Les fils sont numérotés de 0 à 5.

Les fils pairs sont parcourus par un courant selon 𝑒⃗𝑧 tandis que les fils impairs sont parcourus par un courant dans le sens de −𝑒⃗𝑧.

1/ On considère le fil numéro 𝑘, dont on note 𝑥𝑘 et 𝑦𝑘 les coordonnées.

Montrer que les composantes cartésiennes du champ magnétique créé par ce fil en un point 𝑀(𝑥,𝑦) sont

𝐵𝑥=−𝜇0(−1)𝑘𝐼2𝜋𝑦−𝑦𝑘(𝑥−𝑥𝑘)2+(𝑦−𝑦𝑘)2et𝐵𝑦=𝜇0(−1)𝑘𝐼2𝜋𝑥−𝑥𝑘(𝑥−𝑥𝑘)2+(𝑦−𝑦𝑘)2
Coup de pouce 1
Commencer par un fil placé à l’origine 𝑂 et parcouru par un courant 𝐼 selon 𝑒⃗𝑧 : le théorème d’Ampère donne 𝐵=𝜇0𝐼2𝜋𝑟.
Coup de pouce 2
Exprimer 𝑒⃗𝑟 à l’aide de 𝑂𝑀⃗, puis utiliser 𝑒⃗𝜃=𝑒⃗𝑧∧𝑒⃗𝑟.
Coup de pouce 3
Pour un fil placé en (𝑥𝑘,𝑦𝑘), translater le repère pour ramener le fil à l’origine.
Coup de pouce 4
Le courant du fil 𝑘 vaut (−1)𝑘𝐼.
Corrigé

Le champ magnétique créé par un fil à l’origine du repère parcouru par un courant 𝐼 s’écrit

𝐵⃗=𝜇0𝐼2𝜋𝑟𝑒⃗𝜃

Le vecteur de base 𝑒⃗𝜃 doit être exprimé dans la base 𝑒⃗𝑥, 𝑒⃗𝑦. On peut pour cela écrire que 𝑒⃗𝜃=𝑒⃗𝑧∧𝑒⃗𝑟 avec 𝑒⃗𝑟=𝑂𝑀⃗‖𝑂𝑀⃗‖=𝑥𝑒⃗𝑥+𝑦𝑒⃗𝑦𝑥2+𝑦2, soit 𝑒⃗𝜃=−𝑦𝑥2+𝑦2𝑒⃗𝑥+𝑥𝑥2+𝑦2𝑒⃗𝑦. On obtient le champ magnétique créé par un fil à l’origine du repère parcouru par un courant 𝐼 :

𝐵𝑥=−𝜇0𝐼2𝜋𝑦𝑥2+𝑦2et𝐵𝑦=𝜇0𝐼2𝜋𝑥𝑥2+𝑦2

Pour trouver le champ créé par le fil 𝑘, situé en (𝑥𝑘,𝑦𝑘), il suffit de translater le repère pour placer le fil à l’origine, c’est-à-dire remplacer 𝑥 par 𝑥−𝑥𝑘 et 𝑦 par 𝑦−𝑦𝑘 dans les expressions précédentes, et de remplacer 𝐼 par le courant (−1)𝑘𝐼 du fil 𝑘 :

𝐵𝑥=−𝜇0(−1)𝑘𝐼2𝜋𝑦−𝑦𝑘(𝑥−𝑥𝑘)2+(𝑦−𝑦𝑘)2et𝐵𝑦=𝜇0(−1)𝑘𝐼2𝜋𝑥−𝑥𝑘(𝑥−𝑥𝑘)2+(𝑦−𝑦𝑘)2

2/ Justifier que les composantes du champ magnétique total en un point 𝑀(𝑥,𝑦) s’écrivent

𝐵𝑥=−𝜇0𝐼2𝜋∑𝑘=05(−1)𝑘𝑦−𝑦𝑘(𝑥−𝑥𝑘)2+(𝑦−𝑦𝑘)2et𝐵𝑦=𝜇0𝐼2𝜋∑𝑘=05(−1)𝑘𝑥−𝑥𝑘(𝑥−𝑥𝑘)2+(𝑦−𝑦𝑘)2

Comment peut-on exprimer les coordonnées (𝑥𝑘,𝑦𝑘) des six fils en fonction du rayon 𝑎 et de 𝑘 ?

Coup de pouce 1
Quel théorème permet d’additionner les champs créés par les six fils ?
Coup de pouce 2
Les six fils sont régulièrement répartis sur un cercle de rayon 𝑎 : quel angle sépare deux fils voisins ?
Corrigé

D’après le théorème de superposition, le champ magnétique total en un point 𝑀(𝑥,𝑦) est la somme des champs créés par chacun des six fils.

Deux fils voisins sont séparés d’un angle 2𝜋/6=𝜋/3. Le fil 𝑘 est donc repéré par les coordonnées polaires (𝑎,𝑘𝜋/3), soit en coordonnées cartésiennes (𝑥𝑘,𝑦𝑘)=(𝑎cos(𝑘𝜋/3),𝑎sin(𝑘𝜋/3)).

3/ Compléter la fonction champ(x, y), qui renvoie les composantes du champ magnétique total en un point (𝑥,𝑦).

import numpy as np
import matplotlib.pyplot as plt

mu_0 = 4e-7 * np.pi  # perméabilité du vide en H/m
a = 1e-2             # rayon de l'hexagone en m
I = 200              # intensité en A

def champ(x, y):
    """Composantes (Bx, By) du champ créé en (x, y) par les six fils."""
    ...
    return Bx, By
Coup de pouce 1
Initialiser Bx et By à 0, puis leur ajouter la contribution de chaque fil dans une boucle for k in range(6).
Coup de pouce 2
Dans la boucle, calculer d’abord les coordonnées xk et yk du fil 𝑘.
Coup de pouce 3
Les opérations de numpy s’appliquent aussi bien à des nombres qu’à des tableaux : écrire les formules comme pour des nombres.
Corrigé
def champ(x, y):
    Bx, By = 0, 0
    for k in range(6):
        xk = a * np.cos(k * np.pi / 3)
        yk = a * np.sin(k * np.pi / 3)
        Bx += - (-1)**k * mu_0 * I / (2 * np.pi) * (y - yk) / ((x - xk)**2 + (y - yk)**2)
        By += (-1)**k * mu_0 * I / (2 * np.pi) * (x - xk) / ((x - xk)**2 + (y - yk)**2)
    return Bx, By

4/ Calculer numériquement le champ au centre 𝑂. Retrouver ce résultat par un argument de symétrie.

Coup de pouce 1
Le plan (𝑂𝑥𝑧) contient les fils 0 et 3. Est-ce un plan de symétrie ou d’antisymétrie de la distribution de courant ?
Coup de pouce 2
Chercher un second plan du même type passant par 𝑂.
Corrigé
print(champ(0, 0))

Le champ magnétique au centre 𝑂 est nul (aux erreurs d’arrondi près).

Le plan contenant les fils 0 et 3 est un plan de symétrie de la distribution de courant, 𝐵⃗(𝑂) lui est orthogonal.

On peut dire de même pour le plan contenant les fils 1 et 4 et le plan contenant les fils 2 et 5.

La seule façon pour 𝐵⃗(𝑂) d’être orthogonal à ces trois plans de symétrie est d’être nul.

La fonction plt.streamplot(X, Y, Bx, By) trace les lignes de champ d’un champ de vecteurs plan dont on connait les composantes Bx et By aux points d’une grille X, Y. Une telle grille s’obtient avec np.meshgrid.

5/ Compléter le programme ci-dessous pour tracer la carte des lignes de champ. Commenter leur allure au voisinage des fils.

x = np.linspace(-1.5 * a, 1.5 * a, 300)
X, Y = np.meshgrid(x, x)  # grille de 300 × 300 points
Bx, By = ...
plt.streamplot(X, Y, Bx, By, density=2)
plt.axis('scaled')
plt.show()
Coup de pouce 1
Autour de chaque fil, le sens des lignes de champ est donné par la règle de la main droite.
Corrigé
Bx, By = champ(X, Y)

Près de chaque fil, on retrouve le champ créé par ce fil : les lignes de champ sont des cercles centrés sur le fil, parcourus dans le sens trigonométrique autour des fils pairs (courant 𝐼) et dans le sens horaire autour des fils impairs (courant −𝐼).

Les neutrons (𝑚=1,675⋅10−27 kg) portent un moment magnétique 𝜇=9,7⋅10−27 J T−1. Placé dans un champ magnétique, un neutron possède l’énergie potentielle magnétique 𝐸mag=𝜇𝐵.

La fonction plt.pcolormesh(X, Y, Z) représente par des couleurs (carte de chaleur) les valeurs d’un tableau Z calculé aux points de la grille X, Y. La fonction plt.colorbar() affiche l’échelle des couleurs.

6/ Compléter le programme ci-dessous pour tracer la carte de l’énergie potentielle magnétique 𝐸mag des neutrons. Où les neutrons ont-ils tendance à se placer ?

m = 1.675e-27  # masse du neutron en kg
mu = 9.7e-27   # moment magnétique du neutron en J/T

B = ...      # norme du champ aux points de la grille
E_mag = ...  # énergie potentielle magnétique en J
# coordonnées en mm ; vmax sature les couleurs près des fils, où E_mag diverge
plt.pcolormesh(X * 1e3, Y * 1e3, E_mag, vmax=1.5e-28)
plt.colorbar(label="E_mag (J)")
plt.xlabel("x (mm)")
plt.ylabel("y (mm)")
plt.axis('scaled')
plt.show()
Coup de pouce 1
La norme du champ s’obtient avec np.sqrt(Bx**2 + By**2).
Coup de pouce 2
Les neutrons se déplacent vers les zones où leur énergie potentielle est la plus faible.
Coup de pouce 3
Observer la forme des zones de même couleur autour de 𝑂.
Corrigé
B = np.sqrt(Bx**2 + By**2)
E_mag = mu * B

L’énergie potentielle magnétique est nulle en 𝑂 et croît quand on s’en éloigne, jusqu’aux fils. Poussés vers les faibles énergies potentielles, les neutrons ont tendance à se placer au voisinage de 𝑂.

On tient maintenant compte de la pesanteur. L’axe (𝑂𝑦) est vertical et orienté vers le haut.

7/ Exprimer l’énergie potentielle totale 𝐸𝑝 d’un neutron. Compléter le programme ci-dessous pour en tracer la carte, avec ses lignes de niveau (sur lesquelles 𝐸𝑝 est constante), puis la commenter.

g = 9.8  # accélération de la pesanteur en m/s²

E_p = ...  # énergie potentielle totale en J
plt.pcolormesh(X * 1e3, Y * 1e3, E_p, vmin=-5e-29, vmax=5e-29)
plt.colorbar(label="E_p (J)")
plt.contour(X * 1e3, Y * 1e3, E_p, levels=np.linspace(-5e-29, 5e-29, 21), colors='k', linewidths=0.5)
plt.xlabel("x (mm)")
plt.ylabel("y (mm)")
plt.axis('scaled')
plt.show()
Coup de pouce 1
L’énergie potentielle de pesanteur s’écrit 𝑚𝑔𝑦 lorsque l’axe (𝑂𝑦) est vertical ascendant.
Coup de pouce 2
Comparer la carte à celle de la question précédente : où se trouve maintenant le creux d’énergie potentielle ?
Corrigé

L’énergie potentielle totale est la somme des énergies potentielles magnétique et de pesanteur : 𝐸𝑝=𝜇𝐵+𝑚𝑔𝑦.

E_p = mu * B + m * g * Y

La pesanteur fait croître 𝐸𝑝 vers le haut. Le creux d’énergie potentielle n’est plus en 𝑂 mais un peu en dessous, vers 𝑦≈−3,6 mm : les lignes de niveau s’y referment. Plus bas, entre les fils 4 et 5, 𝐸𝑝 diminue de nouveau : c’est par là que les neutrons pourraient s’échapper.

8/ Compléter le programme ci-dessous pour tracer 𝐸𝑝 le long de l’axe vertical 𝑥=0, pour 𝑦 entre −𝑎 et 𝑎. Les neutrons ont-ils une position d’équilibre stable ? Le piège confine-t-il les neutrons ?

y = np.linspace(-a, a, 1000)
Bx, By = champ(0, y)  # points de l'axe x = 0
E_p = ...
plt.plot(..., ...)
plt.xlabel("y (mm)")
plt.ylabel("E_p (J)")
plt.grid()
plt.show()
Coup de pouce 1
Une position d’équilibre stable correspond à un minimum local de l’énergie potentielle.
Coup de pouce 2
Un minimum sur l’axe 𝑥=0 est-il aussi un minimum selon 𝑥 ? S’aider de la carte de la question précédente.
Corrigé
E_p = mu * np.sqrt(Bx**2 + By**2) + m * g * y
plt.plot(y * 1e3, E_p)

Le long de l’axe, 𝐸𝑝 présente un minimum local en 𝑦≈−3,6 mm, suivi d’une barrière en 𝑦≈−7,5 mm. Sur la carte, les lignes de niveau se referment autour de ce point : c’est aussi un minimum selon 𝑥. C’est donc une position d’équilibre stable : un neutron qui s’en écarte un peu dans le plan (𝑂𝑥𝑦) y est ramené, et le piège le confine selon (𝑂𝑥) et (𝑂𝑦). Les fils étant infinis, rien ne le retient en revanche selon (𝑂𝑧).

Ce n’est pas vrai pour toute intensité : pour 𝐼=100 A, 𝐸𝑝 décroit continument quand on descend le long de l’axe. Il n’y a pas de minimum local, et les neutrons tombent entre les fils 4 et 5.