Zone de dépôt de puissance ECR dans une description fluide
Du chauffage Joule tensoriel à l’épaisseur de la couche résonnante
2026-09-18
Le problème posé
Quelle épaisseur pour la couche de chauffage ECR ?
Dans une source ECR à 2,45 GHz, les électrons absorbent l’onde là où leur pulsation cyclotron égale celle de l’onde :
\[\omega_c = \frac{eB}{m_e} = \omega \quad\Longleftrightarrow\quad B = 875\ \text{G}\]
C’est une surface, pas un volume. Toute la puissance est déposée dans une couche mince autour d’elle.
La question pratique : quelle est son épaisseur ? Elle conditionne le maillage, la convergence, et la validité même d’une description fluide.
Le fil du raisonnement
- D’où vient \(P\) — chauffage Joule \(\frac{1}{2}\mathrm{Re}(\mathbf{j}\cdot\mathbf{E}^*)\) avec une mobilité tensorielle
- Structure lorentzienne — exacte en \(u = \omega_c^2\)
- Largeur spectrale — FWHM \(= 2\nu\)
- Largeur spatiale — division par le gradient \(\alpha\) → loi en \(1/\alpha\)
- Modèle particulaire — temps de transit → loi en \(1/\sqrt{\alpha}\)
- Réconciliation — la fréquence effective \(\nu_{eff}\) de Hagelaar
- Conservation — élargir ne doit pas changer la puissance déposée
1. D’où vient l’expression de \(P\)
Chauffage Joule dans une description fluide
Le point de départ :
\[P = \tfrac{1}{2}\,\mathrm{Re}(\mathbf{j}\cdot\mathbf{E}^*), \qquad \mathbf{j} = q\,n_e\,\mathbf{v}, \qquad \mathbf{v} = \boldsymbol{\mu}\cdot\mathbf{E}\]
C’est la forme moyennée sur une période de l’éq. (5) de Hagelaar et al. (2009), \(P = -e\langle\tilde{\mathbf{E}}\cdot\tilde{\mathbf{v}}_e\rangle_t\).
La fermeture est l’équation de quantité de mouvement locale (éq. (4)), qui néglige les dérivées spatiales et la force magnétique de l’onde :
\[\frac{\partial\tilde{\mathbf{v}}_e}{\partial t} + \nu_m\tilde{\mathbf{v}}_e - \frac{e}{m_e}\mathbf{B}\times\tilde{\mathbf{v}}_e = -\frac{e}{m_e}\tilde{\mathbf{E}}\]
La mobilité devient un tenseur
Champ AC et champ magnétique DC simultanés → \(\boldsymbol{\mu}\) est tensorielle et fortement anisotrope :
\[\mu_\perp = \frac{\mu_\parallel}{1 + (eB/m_e\nu_e)^2}\]
(éq. (12) de Hagelaar et al. (2009))
En conditions ECR, \(\mu_\parallel/\mu_\perp\) atteint 8 ordres de grandeur.
\(\nu_m\) est la fréquence de transfert d’impulsion, dominée par les collisions électron-neutre : \(\nu_m \simeq \nu_e\).
De la mobilité tensorielle à \(\mathrm{Re}(\sigma_\perp)\)
En régime harmonique \(\propto e^{i\omega t}\), la conductivité perpendiculaire d’un plasma froid magnétisé collisionnel s’écrit
\[\sigma_\perp = \frac{n_e e^2}{m_e}\,\frac{\nu + i\omega}{(\nu + i\omega)^2 + \omega_c^2}\]
Extraction de la partie réelle
On pose \(z = \nu + i\omega\) et \(z^2 + \omega_c^2 = A + iB\) avec
\[A = \nu^2 + \omega_c^2 - \omega^2, \qquad B = 2\nu\omega\]
d’où \(\mathrm{Re}(\sigma_\perp) \propto \dfrac{\nu A + \omega B}{A^2 + B^2}\)
Le résultat, qui est l’expression de \(P\) utilisée partout ensuite :
\[\boxed{\;P \;\propto\; \frac{\nu\,(\nu^2 + \omega^2 + \omega_c^2)} {\nu^4 + 2\nu^2(\omega^2 + \omega_c^2) + (\omega^2 - \omega_c^2)^2}\;}\]
les deux écritures du dénominateur étant liées par
\[(\nu^2 + \omega_c^2 - \omega^2)^2 + 4\nu^2\omega^2 = \ \cdots\]
Cohérence avec Lieberman et Lichtenberg (2005)
Près de la résonance et pour \(\nu \ll \omega\), on retrouve la forme collisionnelle de l’éq. (13.1.19), \(\bar p_{ecr} \propto \nu_m/[\nu_m^2 + (\omega - \omega_{ce})^2]\), dont le pic vaut \(1/(2\nu)\) — l’absorption est d’autant plus intense que le plasma est peu collisionnel.
La résonance, vue par la formule
Ce que montre la courbe :
- résonance nette en \(\omega_c = \omega\) dès que \(\nu \ll \omega\) ;
- amplitude au pic \(\propto 1/\nu\), largeur \(\propto \nu\) ;
- les ailes décroissent en \(1/(\omega_c - \omega)^2\).
À retenir pour la suite
Ces deux dépendances opposées — pic en \(1/\nu\), largeur en \(\nu\) — sont ce qui rendra l’aire indépendante de \(\nu\) (§ conservation).
La même courbe, en direct : l’aire ne bouge pas
Plot.plot({
width: 520, height: 330, marginLeft: 62, marginBottom: 42,
x: {domain: [0, 2], label: "ω_c / ω →"},
y: {type: "log", domain: [1e-6, 1e5], label: "↑ P (u.a.)", grid: true},
marks: [
Plot.ruleX([1], {stroke: "#b5392c", strokeDasharray: "4,3"}),
Plot.ruleY([pResonance/2], {stroke: "#7d7875", strokeDasharray: "2,3"}),
Plot.line(courbeRes, {x: "x", y: "P", stroke: "#2e8bce", strokeWidth: 2}),
Plot.frame({stroke: "#d6edf9"})
]
})html`<div style="font-size:0.78em; line-height:1.55; border-left:3px solid #2e8bce;
padding-left:0.8em; margin-bottom:0.6em;">
<div>ν/ω = <b style="color:#066aab">${d3.format(".2e")(nuRes)}</b></div>
<div>P(ω_c=ω) = <b>${d3.format(".3e")(pResonance)}</b>
<span style="color:#5a7080">(≈ 1/2ν = ${d3.format(".3e")(0.5/nuRes)})</span></div>
<div>FWHM ≈ 2ν = <b>${d3.format(".2e")(2*nuRes)}</b></div>
<hr style="margin:0.5em 0; border:none; border-top:1px solid #d6edf9">
<div>∫₀<sup>${xmaxRes}</sup> P dx = <b>${d3.format(".4f")(integraleRes)}</b></div>
<div style="font-size:1.15em">soit <b style="color:${ecartRes < 1 ? '#066aab' : '#b5392c'}">
${d3.format(".1f")(100*integraleRes/(Math.PI/2))} %</b> de π/2</div>
</div>`À manipuler : balayer \(\nu\) sur six décades. Le pic monte en \(1/\nu\), la largeur tombe en \(\nu\) — et l’aire reste à \(\pi/2\), à 0,4 % près sur \([0,2]\) dès que \(\nu/\omega \lesssim 10^{-2}\), et à 0,01 % si l’on élargit le domaine.
La seule façon de perdre de l’aire : tronquer
À \(\nu/\omega = 1\), on ne lit que 65 % sur \([0,2]\), mais 99,4 % sur \([0,100]\). La « perte » est de la troncature des ailes, jamais de la physique : le pic s’élargit jusqu’à déborder de la fenêtre, pas jusqu’à disparaître.
Et on ne peut pas non plus en gagner : aux grands \(\omega_c\), \(P \to \nu/\omega_c^{2}\), donc l’intégrale converge. Élargir le domaine sature à \(\pi/2\) sans jamais le dépasser — \(\pi/2\) est bien un total, pas un artefact de fenêtre.
nuRes = Math.pow(10, logNuRes)
pOfX = function (x, n) {
return n*(n*n + 1 + x*x) /
(Math.pow(n, 4) + 2*n*n*(1 + x*x) + Math.pow(1 - x*x, 2));
}
pResonance = pOfX(1, nuRes)
// Grille log-graduée : cœur linéaire sur ±4ν, puis ailes espacées géométriquement de
// part et d'autre de la résonance. Les ailes décroissent en 1/(ω_c-ω)^2 : il leur faut
// une résolution *relative* constante, pas un pas constant. Avec ~1500 points seulement,
// l'intégrale est convergée à 0,05 % sur les six décades de ν balayées.
grilleRes = function (n, xm) {
const pts = [0, xm, 1];
const coeur = Math.min(4*n, 0.5*xm);
for (let i = 0; i <= 400; i++) pts.push(1 - coeur + 2*coeur*i/400);
const dmin = n/50, dmax = xm;
for (let i = 0; i <= 600; i++) {
const d = dmin*Math.pow(dmax/dmin, i/600);
pts.push(1 - d); pts.push(1 + d);
}
return Array.from(new Set(pts.filter(x => x >= 0 && x <= xm))).sort((u, v) => u - v);
}
courbeRes = grilleRes(nuRes, 2).map(x => ({x: x, P: pOfX(x, nuRes)}))
integraleRes = {
const x = grilleRes(nuRes, xmaxRes);
let s = 0;
for (let i = 1; i < x.length; i++) {
s += 0.5*(pOfX(x[i], nuRes) + pOfX(x[i-1], nuRes))*(x[i] - x[i-1]);
}
return s;
}
ecartRes = Math.abs(100*integraleRes/(Math.PI/2) - 100)2. Structure lorentzienne exacte
Le bon changement de variable : \(u = \omega_c^2\)
En posant \(u = \omega_c^2\), le dénominateur de \(P\) se factorise exactement :
\[\boxed{\;D(u) = (u - u_0)^2 + \Gamma^2\;}\]
\[u_0 = \omega^2 - \nu^2, \qquad \Gamma = 2\omega\nu\]
Et le numérateur est lentement variable près de la résonance :
\[\nu(\nu^2 + \omega^2 + \omega_c^2) \simeq 2\nu\omega^2 \quad \text{pour } \omega_c \simeq \omega,\ \nu \ll \omega\]
Le résultat structurant
\(P\) est un lorentzien en \(\omega_c^2\) — et non en \(\omega_c\).
Tout le reste (largeur, aire, transposition spatiale) en découle analytiquement, sans aucun paramètre ajusté.
C’est aussi ce qui explique la légère asymétrie du pic en \(\omega_c\) : elle vient du jacobien \(du = 2\omega_c\,d\omega_c\).
3. Largeur spectrale de la résonance
FWHM : une formule sans paramètre libre
La mi-hauteur en \(u\) est atteinte en \(u = u_0 \pm \Gamma\), d’où les points à mi-hauteur exacts en \(\omega_c\) :
\[\omega_{c\pm} = \sqrt{\omega^2 - \nu^2 \pm 2\omega\nu}\]
\[\mathrm{FWHM} = \omega_{c+} - \omega_{c-}\]
Linéarisé pour \(\nu \ll \omega\) :
\[\boxed{\;\mathrm{FWHM} \simeq 2\nu\;}\]
Deux corollaires utiles
1. La FWHM contient exactement 50 % de l’aire
Propriété classique du lorentzien. La généralisation à une fraction \(X\) de l’aire s’obtient par la primitive en arctangente :
\[\Delta_X \simeq 2\nu\,\tan(X\pi/2)\]
qui redonne bien \(2\nu\) en \(X = 50\,\%\).
Limite de validité
La formule se dégrade pour \(X\) grand : elle sollicite les ailes, où l’hypothèse « numérateur constant » tombe et où l’intégrale devient sensible au domaine (\(P \sim 1/\omega_c\) aux grands \(\omega_c\)).
2. L’élargissement artificiel agit linéairement
COMSOL et Hagelaar et al. (2009) remplacent
\[\nu \;\longrightarrow\; \nu_e + \frac{\omega}{\delta}\]
Puisque FWHM \(\simeq 2\nu\), cet ajout élargit proportionnellement la résonance.
Pourquoi faire cela ?
Motif affiché : rendre la couche maillable et le calcul convergent. Nous verrons au §6 que la justification est en réalité physique.
4. De la largeur spectrale à la largeur spatiale
Le gradient de champ magnétique fait le lien
Dans une source réelle, \(\omega_c\) varie avec la position via \(B(\mathbf{r})\). Lieberman et Lichtenberg (2005) éq. (13.1.3) définit le gradient normalisé au point de résonance :
\[\omega_{ce}(z') = \omega(1 + \alpha z')\]
\[\alpha = \left.\frac{1}{\omega_{ce}} \frac{\partial\omega_{ce}}{\partial z'}\right|_{res} \quad [\mathrm{m^{-1}}]\]
Diviser la largeur spectrale par le gradient local donne l’épaisseur géométrique :
\[\boxed{\;\Delta r_{res} = \frac{\mathrm{FWHM}}{|\nabla\omega_c|} = \frac{2\nu_e}{\alpha\,\omega} \;\propto\; \frac{1}{\alpha}\;}\]
C’est la prédiction du modèle fluide.
La surface ECR se matérialise en un anneau mince : ici 65 µm pour une source de 5 cm.
L’anneau en direct : gradient, position, élargissement
html`<div style="font-size:0.62em; line-height:1.5; border-left:3px solid #2e8bce;
padding-left:0.6em; margin-top:0.4em;">
<div>α = <b style="color:#066aab">${d3.format(".2f")(alphaMap)}</b> m⁻¹</div>
<div>r<sub>ECR</sub> = <b>${d3.format(".2f")(100*rEcrMap)}</b> cm</div>
<div>ν/ω = <b>${d3.format(".1e")(nuMap/wMW)}</b></div>
<hr style="margin:0.4em 0; border:none; border-top:1px solid #d6edf9">
<div>Δr<sub>res</sub> = <b style="color:${effMap ? '#066aab' : '#b5392c'}">
${d3.format(".3f")(1e3*drResMap)}</b> mm</div>
<div style="color:#5a7080">pixel = ${d3.format(".3f")(1e3*2*Rsrc/259)} mm
→ <b>${d3.format(".1f")(drResMap/(2*Rsrc/259))}</b> px / FWHM</div>
</div>`qElec = 1.602176634e-19
mElec = 9.1093837015e-31
wMW = 2*Math.PI*2.45e9
Rsrc = 0.05
nuE = 5e6
BecrG = mElec*wMW/qElec*1e4
// Profil Bz(r) = B_ECR + 100k[2(r/R)^p - 1] : le zéro du crochet fixe r_ECR, donc p
// déplace l'anneau et k n'en règle que la pente.
bzG = function (r, k, p) { return BecrG + 100*k*(2*Math.pow(r/Rsrc, p) - 1); }
pOfWcMap = function (wc, nu) {
return nu*(nu*nu + wMW*wMW + wc*wc) /
(Math.pow(nu, 4) + 2*nu*nu*(wMW*wMW + wc*wc) + Math.pow(wMW*wMW - wc*wc, 2));
}
nuMap = effMap ? nuE + wMW/deltaMap : nuE
rEcrMap = Rsrc*Math.pow(0.5, 1/pMap)
alphaMap = 200*kMap*(pMap/Rsrc)*Math.pow(0.5, (pMap - 1)/pMap)/BecrG
drResMap = 2*nuMap/(alphaMap*wMW)
pResMap = pOfWcMap(wMW, nuMap)
// Tables de couleurs précalculées : sans elles, parser une couleur d3 par pixel rendrait
// le curseur poussif (2 x 67 600 pixels par rafraîchissement).
lutViridisMap = d3.range(256).map(i => d3.rgb(d3.interpolateViridis(i/255)))
lutInfernoMap = d3.range(256).map(i => d3.rgb(d3.interpolateInferno(i/255)))
dessineCarte = function (mode) {
const n = 260;
const cv = document.createElement("canvas");
cv.width = n; cv.height = n;
cv.style.width = "100%"; cv.style.maxWidth = "310px";
const ctx = cv.getContext("2d");
const img = ctx.createImageData(n, n);
const bmin = BecrG - 100*kMap, bmax = BecrG + 100*kMap;
const logMin = Math.log10(pResMap/1e4);
for (let j = 0; j < n; j++) {
const y = Rsrc*(2*j/(n - 1) - 1);
for (let i = 0; i < n; i++) {
const x = Rsrc*(2*i/(n - 1) - 1);
const r = Math.hypot(x, y);
const o = 4*(j*n + i);
if (r > Rsrc) { // hors du disque source : profil non défini
img.data[o] = 244; img.data[o+1] = 248; img.data[o+2] = 252; img.data[o+3] = 255;
continue;
}
const B = bzG(r, kMap, pMap);
let c;
if (mode === "B") {
c = lutViridisMap[Math.max(0, Math.min(255,
Math.round(255*(B - bmin)/(bmax - bmin))))];
} else {
const P = pOfWcMap(qElec*(B*1e-4)/mElec, nuMap);
c = lutInfernoMap[Math.max(0, Math.min(255,
Math.round(255*(Math.log10(P) - logMin)/4)))];
}
img.data[o] = c.r; img.data[o+1] = c.g; img.data[o+2] = c.b; img.data[o+3] = 255;
}
}
ctx.putImageData(img, 0, 0);
ctx.strokeStyle = "#ffffff"; ctx.setLineDash([5, 4]); ctx.lineWidth = 1.3;
ctx.beginPath();
ctx.arc(n/2, n/2, (rEcrMap/Rsrc)*(n/2), 0, 2*Math.PI);
ctx.stroke();
return cv;
}
carteChampMap = dessineCarte("B")
cartePuissanceMap = dessineCarte("P")5. Le modèle particulaire
Un tout autre raisonnement : le temps de transit
Le calcul sans collisions de Lieberman et Lichtenberg (2005) §13.1 part de la cohérence de phase. Un électron ne gagne de l’énergie que tant que le déphasage accumulé reste faible — condition (13.1.16) :
\[[\omega - \omega_{ce}(v_{res}\Delta t_{res})]\,\Delta t_{res} \approx 2\pi\]
d’où le temps de résonance (13.1.13) puis la largeur de zone (13.1.14) :
\[\Delta t_{res} = \left(\frac{2\pi}{\omega|\alpha|v_{res}}\right)^{1/2}\]
\[\boxed{\;\Delta z_{res} = v_{res}\Delta t_{res} = \left(\frac{2\pi v_{res}}{\omega|\alpha|}\right)^{1/2} \propto \frac{1}{\sqrt{\alpha}}\;}\]
Le conflit
| loi d’échelle | |
|---|---|
| Fluide (collisions) | \(\Delta r \propto 1/\alpha\) |
| Particulaire (transit) | \(\Delta z \propto \alpha^{-1/2}\) |
Ce ne sont pas les mêmes pentes.
Et l’écart n’est pas qu’une pente : pour \(\nu_e = 5\cdot10^6\) s⁻¹ et \(\alpha = 10\) m⁻¹,
- fluide → 65 µm
- particulaire → 5,4 mm
soit deux ordres de grandeur. Les deux lois ne se croisent qu’à \(\alpha \sim 10^{-3}\) m⁻¹, hors de toute plage réaliste.
Le diagnostic
Un modèle fluide purement collisionnel sous-estime massivement l’épaisseur de la couche ECR
Non pas d’un facteur 2, mais de deux ordres de grandeur aux gradients réalistes. La couche devient alors plus fine que toute maille raisonnable — d’où les problèmes de maillage et de convergence signalés par Hagelaar et al. (2009).
La question devient donc : peut-on garder la commodité d’une description fluide tout en reproduisant la physique du temps de transit ?
6. Réconciliation : la fréquence effective
L’argument de Hagelaar et al. (2009) (§2.1)
L’idée physique : sur l’échelle de temps de l’interaction (plusieurs périodes micro-onde), les électrons traversent la zone de résonance et perdent la cohérence de phase — un effet, selon les auteurs, « très semblable à celui des collisions ».
On l’absorbe donc dans une fréquence de transfert d’impulsion augmentée :
\[\nu_m = \nu_e + \nu_{eff}\]
\[\nu_{eff} \sim \frac{v_T}{\delta_{res}} \sim \left(\frac{v_T\,\omega}{\delta_B}\right)^{1/2} = \sqrt{v_T\,\omega\,\alpha}\]
\(\delta_B = 1/\alpha\) étant la longueur de gradient de \(B\).
En injectant dans la loi fluide :
\[\Delta r_{res}^{(\nu_{eff})} = \frac{2\nu_{eff}}{\alpha\omega} = 2\sqrt{\frac{v_T}{\omega\alpha}} \;\propto\; \frac{1}{\sqrt{\alpha}}\]
Le résultat clé
La loi fluide corrigée retrouve exactement la pente \(-1/2\) du modèle particulaire, et même son préfacteur à \(2/\sqrt{2\pi} = 0{,}80\) près.
\(\nu_{eff}\) n’est donc pas un artifice numérique : c’est ce qui rend la description fluide compatible avec la cinétique du temps de transit.
Les trois lois, côte à côte
Les points bleus sont la FWHM mesurée directement sur \(P\) : ils tombent sur la loi fluide à 0,04 %, avec une pente ajustée de \(-1{,}0000\).
Corollaire : le \(\delta\) de COMSOL n’est pas une constante
En écrivant \(\nu_{eff} = \omega/\delta\), la valeur cohérente du paramètre d’élargissement artificiel est
\[\boxed{\;\delta_{requis}(\alpha) = \frac{\omega}{\nu_{eff}} = \sqrt{\frac{\omega}{v_T\,\alpha}} \;\propto\; \alpha^{-1/2}\;}\]
Hagelaar et al. (2009) retient \(\nu_{eff} = \omega/20 \approx 10^9\) s⁻¹ en précisant qu’il s’agit d’un ordre de grandeur. La formule donne \(\delta \approx 46\) pour \(\alpha = 0{,}1\) cm⁻¹ et \(T_e = 3\) eV : même ordre de grandeur, mais dépendant du gradient local.
7. Conservation de la puissance déposée
Élargir ne doit rien créer ni détruire
C’est la condition de légitimité de toute la méthode. Lieberman et Lichtenberg (2005) éq. (13.1.21) intègre le lorentzien sur l’espace :
\[\bar S_{ecr} = \frac{2e^2E_r^2 n}{m\omega|\alpha|} \tan^{-1}\!\left(\frac{\omega|\alpha|z_0}{\nu_m}\right) \;\xrightarrow[z_0\to\infty]{}\; \frac{\pi n e^2 E_r^2}{m\omega|\alpha|}\]
indépendant de \(\nu_m\) : l’amplitude au pic décroît en \(1/\nu\) pendant que la largeur croît en \(\nu\), et les deux se compensent exactement.
Les deux sources se répondent
Test de cohérence
C’est le critère le plus discriminant sur l’expression de \(P\) : toute erreur de numérateur casse cette invariance. Une coquille de ce type a d’ailleurs été détectée et corrigée par ce test durant l’étude.
La correction redistribue, elle ne détruit pas
Couche de 65 µm → 4,4 mm, pour une puissance totale déposée conservée (l’écart résiduel de 8,5 % est de la troncature des ailes par le bord du domaine, et tombe à 3,9 % en intégrant jusqu’à \(20R\)).
Synthèse
Ce qu’il faut retenir
L’expression fluide de \(P\), issue de \(\frac{1}{2}\mathrm{Re}(\mathbf{j}\cdot\mathbf{E}^*)\) avec mobilité tensorielle, est un lorentzien exact en \(\omega_c^2\), de largeur spectrale \(2\nu\).
Divisée par le gradient local, elle donne une couche \(\Delta r_{res} = 2\nu_e/(\alpha\omega) \propto 1/\alpha\).
Le calcul particulaire de Lieberman et Lichtenberg (2005) donne \(\propto \alpha^{-1/2}\), soit une couche deux ordres de grandeur plus épaisse aux gradients réalistes.
La fréquence effective \(\nu_{eff} \sim \sqrt{v_T\omega\alpha}\) de Hagelaar et al. (2009) réconcilie les deux : même pente \(-1/2\), préfacteur à 20 % près, sans modifier la puissance totale déposée.
Conséquence pratique : le \(\delta\) de l’élargissement artificiel devrait varier en \(\alpha^{-1/2}\), et non être fixé une fois pour toutes.
Suite
La mise en œuvre numérique — maillage, mesure des largeurs, bilans de puissance — est décrite dans ECR_fluide_COMSOL.md et implémentée dans sigmaECR_2Daxi_example.py.
Références
Modélisation plasma — Absorption ECR en modèle fluide

