Skip to content

Resistive penetrated field blows up at rational surfaces — recover it from the inner-layer solution #301

Description

@matt-pharr

Problem

In the resistive (RPEC / gal-resistive) path, the reconstructed perturbed field b^ψ blows up at the rational surfaces. Because b^ψ ∝ (m − nq)·ξ^ψ and the outer Newcomb solution near a Mercier-stable surface carries a large solution ~|x|^{1/2−√(−D_I)}, the resonant component cusps (and for D_I < −1/4 diverges) right where we want to read the penetrated resonant field. The same cusp is visible in the Fortran output and in the paper figures — it is physical structure of the outer solution, not a bug, but it makes the on-surface field ill-defined.

We currently estimate the penetrated field by sampling the outer solution pointwise at a small fixed offset from the surface (SingularCoupling.jl, spot_psi = 5e-4/(|n|·|q′|)). This muddles the meaning of the metric: at low resistivity the sampled value pins to the regular background ("numerical floor") and cannot resolve the true (smaller, differing) penetration; the value also depends on the arbitrary offset.

Why this is a child of #230

#230 proposes getting Δ_mn directly from the Frobenius/asymptotic structure instead of numerically differentiating the perturbed B field across the surface, and already notes the resistive case "must be treated very carefully." This issue is that resistive special case for the penetrated field quantity: stop reading a numerical field at the singular surface; get the resonant amplitude from the matched asymptotic coefficients instead.

Proposed direction — use the inner-layer solution

The reconnected/penetrated flux is well-defined and cusp-free inside the resistive layer, where the GGJ inner equations regularize the (m − nq) factor. The Fortran rmatch already does exactly this: match_output_solution (rmatch/match.f) never reads the penetrated field off the cusped outer solution — it builds the inner-region field intotsol_b from the Ψ-component of the GGJ inner solution at the layer center, weighted by the inner matching coefficients cin, and scales it by chi1·i·n·q′·x0 (x0 = S^(−1/3)). At x = 0 that value is finite and smooth — it is the reconnected flux.

Concretely, per rational surface i and drive column j:

b_pen_inner[i,j] = (v1/x0)^(1/2+p1) · chi1 · i · n · q′ · x0
                   · [ Ψ₀(parity1)·cin[2i, j] + Ψ₀(parity2)·cin[2i−1, j] ]

with Ψ₀ = inner Ψ at x = 0, p1 = √(−D_I). The Julia inner solver already exposes the needed pieces (InnerLayer.GGJ.solve_inner_profile returns the inner Ψ profile; gal_match_rpec has cin).

A throwaway diagnostic (behind GAL_DUMP_INNER in GalerkinMatch.jl, used by benchmarks/resistive_resmets/) confirms the inner-layer value is finite, smooth, and monotonic in resistivity, resolving penetration well below the pointwise "floor" that the current method saturates at.

Scope of work

  • Promote the inner-layer penetrated-field computation from the scratch diagnostic into the production PerturbedEquilibrium singular-coupling path (replace / supplement the pointwise-offset b_pen in SingularCoupling.jl).
  • Match the Fortran intotsol_b conventions (component = Ψ, parity ordering, cin pairing, the (v1/x0)^(1/2+p1) rescale and chi1·i·n·q′·x0 scaling).
  • Decide whether Δ_mn / shielded-flux metrics should likewise come from the asymptotic coefficients (ties back to Create asymptotics matrix for direct Delta_mn calculation #230).
  • Add/extend a regression case for the penetrated field once the definition is finalized.

References

  • Fortran: rmatch/match.f match_output_solution (intotsol_b build), rmatch/deltac.f deltac_output_solution/deltac_get_solution (inner Ψ reconstruction + rescale).
  • Julia: src/InnerLayer/GGJ/Galerkin.jl (solve_inner_profile), src/ForceFreeStates/Galerkin/GalerkinMatch.jl (cin), src/PerturbedEquilibrium/SingularCoupling.jl (current pointwise b_pen).
  • Glasser, Wang & Park, Computation of resistive instabilities by matched asymptotic expansions, Phys. Plasmas 23, 112506 (2016); Wang et al., Phys. Plasmas 27, 122509 (2020).

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

Fields

No fields configured for Task.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions