Repository navigation
Conversation
… kinetic HDF5 Add an optional chi_i (ion perpendicular heat diffusivity) dataset to the kinetic-profile reader and writer, alongside chi_e and chi_phi. Ship chi_i in the DIII-D-like example kinetic file, built like its chi_e: AOT CHI_I of DIII-D 147131 at 2300 ms, mapped rho_N -> psi_N with EFIT01 RHOVN, the spurious zero at psi_N = 1 dropped, Gaussian-smoothed with sigma = 12 of 201 rho_N points (the width that best reproduces the example chi_e from AOT CHI_E). Range 0.46-2.1 m^2/s. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…i_perp to chi_perp_e New [SLAYER] P_perp_model selects how the perpendicular Prandtl number is built: - chi_perp_e (default, unchanged numbers): tau_R*chi_perp_e/r_s^2 - chi_perp_i: tau_R*chi_perp_i/r_s^2 (kinetic-file chi_i, scalar fallback) - P_phi: P_perp = P_tor (Fitzpatrick, Phys. Plasmas 30, 092512 (2023), Eq. 143) - D_perp: tau_perp = r_s^2/D_perp (Fitzpatrick, Phys. Plasmas 29, 032507 (2022)) - c_beta: C^2 = P_perp with C = c_beta (Park et al., Phys. Plasmas 29, 122505 (2022)) Breaking: the [SLAYER] chi_perp key is renamed chi_perp_e. chi_perp_e still sets the critical-Delta offset in every mode. Regression harness diiid_slayer_n1 develop vs local: 17 unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…= tau_R/tau_E) A single [SLAYER] tau_E [s] for the whole plasma sets P_perp = P_tor = tau_R/tau_E at every surface (Fitzpatrick, Phys. Plasmas 30, 092512 (2023), Eq. 131). validate() requires a positive tau_E when this model is selected. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…. 16
P_perp_model = D_perp now builds D_perp per surface from Eq. 16 of Fitzpatrick,
Phys. Plasmas 29, 032507 (2022), with eta_perp = eta_par:
D_perp = c_beta^2 eta/mu0 + (2/3)(1 - c_beta^2)[eta_e tau_e/(1+eta_e) chi_perp_e
+ eta_i tau_i/(1+eta_i) chi_perp_i]
using the n, T_e, T_i log-gradients at the surface (Eqs. 4-6, written flat-density
safe). The scalar D_perp input is removed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e DIII-D-like SLAYER example Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Effect of each
|
P_perp_model |
P_⊥ (2/1, 3/1, 4/1) | P_φ (2/1, 3/1, 4/1) | γ [Hz] (2/1, 3/1, 4/1) | Δγ vs default (2/1, 3/1, 4/1) | ω [Hz] 2/1 |
|---|---|---|---|---|---|
chi_perp_e |
50.3, 44, 35.7 | 34.7, 24.7, 19 | 192, -251, -1012 | — | -10527 |
chi_perp_i |
29.9, 26.4, 12.5 | 34.7, 24.7, 19 | 213, -274, -1217 | +11 %, -9 %, -20 % | -10523 |
P_phi |
34.7, 24.7, 19 | 34.7, 24.7, 19 | 206, -277, -1123 | +8 %, -10 %, -11 % | -10525 |
D_perp |
16.4, 17.5, 10.9 | 34.7, 24.7, 19 | 242, -296, -1249 | +26 %, -18 %, -23 % | -10516 |
c_beta |
0.0133, 0.0088, 0.00645 | 34.7, 24.7, 19 | 313, -588, -1669 | +63 %, -134 %, -65 % | -10133 |
tau_E |
34.5, 30.8, 27.6 | 34.5, 30.8, 27.6 | 206, -264, -1034 | +8 %, -5 %, -2 % | -10525 |
The Δγ column is (γ − γ_default)/|γ_default|, so + means more unstable. For scale, the run-to-run AMR noise on γ is about 0.01 %.
Takeaways
- Only
c_betachanges the answer qualitatively. Its P_⊥ = c_β² ≈ 0.01, three to four orders of magnitude below every other model. The 2/1 drive rises about 60 %, the stable 3/1 and 4/1 roots damp 65–135 % harder, and ω on the 2/1 shifts about 4 %. Every other model shifts ω by less than 0.1 %. - The χ-based models move γ by roughly 10–25 %.
chi_perp_iuses the example's χ⊥,i, which is about 0.4–0.6 of χ⊥,e at these surfaces. That halves P_⊥ and moves γ by about 10 % at the 2/1 and 3/1 and 20 % at the 4/1.D_perpgives the smallest P_⊥ of the transport-based models, so it moves γ the furthest, by 18–26 %.- Across these models, a lower P_⊥ makes the 2/1 more unstable and the 3/1 and 4/1 more stable.
P_phiandtau_Eland close together. With τ_E = 0.1 s, τ_R/τ_E happens to be close to the χ_φ-based P_φ on the 2/1.tau_Ealso overrides P_φ, so its 3/1 and 4/1 sit nearer the default. γ scales with the chosen τ_E, so these numbers only illustrate the model.chi_perp_e(the default) reproduces develop exactly; see the regression report in the PR description.
The unit tests (Pkg.test() at 27d0744 on feynman) pass.
🤖 Generated with Claude Code
Example kinetic-file χ profiles vs the DIII-D 147131 AOT sourceEach panel compares
At the SLAYER surfaces (new
Notes
🤖 Generated with Claude Code |
… and describe c_beta as the no-transport limit of D_perp The SLAYER file headers and the c_beta P_perp_model cited "Park et al., Phys. Plasmas 29, 122505 (2022)", which does not exist. The paper is J.-K. Park, Phys. Plasmas 29, 072506 (2022), doi:10.1063/5.0093079, as docs/src/citations.md already lists. Its Eq. 10 defines C² = c_β² + (1 − c_β²)K; C = c_β drops the thermal-conduction K, which makes P_perp = c_β² the χ⊥ → 0 limit of the D_perp model. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…o feature/slayer-pperp-models
|
@logan-nc @d-burg This adds a variety of options for perpendicular diffusion inputs. It doesn't change the default yet, so selecting the chi_perp_e is the same as what currently exists. You can see in the comparison that the only really different one is the c_beta which is good news (and encouragement to have this increased fidelity vs the Fortran slayer implementation). I think that we should move to full D_perp as default since there is not a literature justification for chi_perp_e ~ D_perp and if people already need chi_phi and chi_perp_e inputs than its not too crazy to also have them input chi_perp_i. It's encouraging that the tau_E choice is right order of magnitude (using tau_E = chi_phi and P_perp = P_phi) so that is also a helpful, user friendly, and control friendly option. After this gets merged, then either @d-burg or I should make a PR changing the default to D_perp and removing the chi_perp_e and chi_perp_i options. Let me know if you have any questions on this. Thanks! |
|
At a high level, this looks good. I agree that if someone has chi_phi and chi_perp_e, they likely have chi_perp_i on hand. If they don't have things, or are lazy then letting them assert a "reasonable" tau_E for their device is a great way to get results quick. |

Release note
P_perp_model = "chi_perp_e"(harness @ d5937d0)chi_perptochi_perp_ein[SLAYER]ofgpec.toml(and thechi_perpkeyword ofbuild_slayer_inputs/slayer_parameters).SLAYER can now build the perpendicular Prandtl number P_⊥ in several ways, selected with the new
[SLAYER] P_perp_modeloption. The kinetic HDF5 schema gains an optionalchi_i(ion perpendicular heat diffusivity) profile, and the DIII-D-like example kinetic file now carries one.P_perp_modelchi_perp_e(default, unchanged behaviour)chi_perp_iP_phiD_perpc_betaD_perp; a floor on P_⊥)tau_Etau_E[s])chi_perp_estill sets the critical-Δdc_tmpin every mode.This PR also corrects the Park citation in the SLAYER file headers (
SLAYER.jl,Riccati.jl,LayerThickness.jl,LayerParameters.jl). They cited "Park et al., Phys. Plasmas 29, 122505 (2022)", which does not exist; the paper is J.-K. Park, Phys. Plasmas 29, 072506 (2022), doi:10.1063/5.0093079, asdocs/src/citations.mdalready lists.Regression report
regress --cases diiid_slayer_n1,diiid_n1 --refs 0e68a0553,d5937d04e --forceon feynman (SLURM, develop vs head after the develop merge, both fresh, manifest pinned).Every quantity is unchanged in both cases: the default
P_perp_model = "chi_perp_e"reproduces develop, and the newchi_idataset is not read by the default model.Notes for reviewers
chi_iis built the same way as the examplechi_e: AOTCHI_Iof DIII-D 147131 at 2300 ms, mapped ρ_N → ψ_N with EFIT01 RHOVN. The spurious zero at ψ_N = 1 is dropped, and the profile is Gaussian-smoothed with σ = 12 of the 201 uniform ρ_N points. That width gives the smallest error when the same smoothing rebuilds the examplechi_efrom AOTCHI_E(about 10 % RMS in log). The resulting range is 0.46–2.1 m²/s, and the file'sprovenanceattribute records the recipe.chi_tordocstrings in the same three files, so whichever merges second needs a small conflict resolution.D_perpmode: η_⊥ = η_∥ is assumed, and the η_s/(1+η_s) factors are written as gradient ratios so flat density is safe.🤖 Generated with Claude Code