This is a reproducible discrepancy report, not an asserted defect. Reported by
Philipp Zenz (TU Graz) during the ITER TC24 NTV benchmark; the measurements below
are his and we have not independently reproduced them. We are filing because
the numbers are specific enough for a maintainer to check quickly, and because if
they hold they bias every gradient-driven PENTRC result.
The observation: PENTRC's thermodynamic drive frequencies appear inconsistent
with the kinetic profiles PENTRC itself reads. The stored omega_T is low by a
radius-dependent factor of roughly 1.7.
The inconsistency
At psi_n = 0.257 on the TC24 case:
| quantity |
value |
omega_T as stored and used by PENTRC |
676.7 rad/s |
| `2 pi T |
dlnT/dpsi_n |
the profile's dlnT/dpsi_n |
-0.874 |
the input file's dlnT/dpsi_n |
-0.878 |
NEO-RT plasma.in dlnT/dpsi_n, same case |
-0.878 |
So the inputs agree to better than a percent across codes — T_i is
15307 eV against NEO-RT's 15306 eV, and wexb is 4856 against
Om_tE = 4863. The disagreement is internal to PENTRC: what it stores as
omega_T does not follow from the profile it read.
What the evidence narrows it to
Three observations. Together they narrow the possibilities; we want to be
explicit that they do not by themselves prove a spline-evaluation defect:
- The deficit is radius dependent.
omega_T runs at 0.49 of the
profile-implied value in the core and 0.82 at the edge. This rules out a
constant normalisation, though not a coordinate change as such: a
psi_pol-to-psi_tor-to-rho transformation has a radius-dependent
derivative Jacobian and would also look like this on its own.
omega_N and omega_T deviate differently at the same psi — omega_N
goes 0.80 to 1.00 over the same range. This excludes one common
multiplicative derivative Jacobian shared by both, which is what a plain
coordinate change would give. It does not exclude every interpolation,
input-selection or per-quantity normalisation error.
- A Python replica of
read_kin's double-spline chain reproduces the
correct derivative. So the profile data and the intended chain are fine;
what differs is the DCON spline f1 evaluation actually used through
inputs.f90 / torque.F90 kin%f1.
Taken together these point at the derivative returned by the spline evaluation
for the kinetic profiles rather than at the profiles, the input file, or the
definition of omega_T — but that is our leading hypothesis, not something the
evidence above establishes.
For orientation in the source: read_kin fits the input grid, resamples onto 101
uniform psi_n points and fits again (pentrc/inputs.f90:212-246, :277);
torque.F90:310 evaluates kin and its derivative and uses kin_f1 in
wdian/wdiat at :314-315; output uses kin%f1 independently at
torque.F90:1891-1904.
Consequences
- The thermodynamic drive
omega_*N, omega_*T is too small by up to ~1.7x
wherever gradients dominate, i.e. at large resonant energy x_res.
- The drive's zero crossing moves:
x0 is 8.46 as PENTRC runs, 5.64 with
corrected gradients, against NEO-RT's 5.52 and a first-principles estimate
of about 5.2. With the gradients corrected the two codes' physical drives
agree; as-run they do not.
- In cross-code comparison this masks as agreement. Trapped-channel ratios
against NEO-RT sit at 0.5-0.9, which reads as reasonable; corrected for
this deficit they move to about 1.2/0.9/1.5. The apparent agreement was
partly this bug cancelling against a real difference.
- Channels driven by rotation rather than gradients are barely affected: for the
quasi-degenerate passing harmonic (x_res ~ 0.1-2.6, omega_E-dominated)
the effect is only about 8%.
What would close it
Compare, for one surface and one species, the derivative kin%f1 returns against
a direct finite difference of kin%f on the same abscissa. They should agree to
spline accuracy. That check is independent of any NTV physics and needs no torque
run, so it should settle the question in minutes either way.
What we can supply
We deliberately have not pasted a reproduction recipe we did not execute. If this
looks plausible to you we will obtain from Philipp and post here the exact GPEC
commit, compiler and build options, the input deck, the relevant output files and
the comparison script, so it can be reproduced rather than argued about.
This is a reproducible discrepancy report, not an asserted defect. Reported by
Philipp Zenz (TU Graz) during the ITER TC24 NTV benchmark; the measurements below
are his and we have not independently reproduced them. We are filing because
the numbers are specific enough for a maintainer to check quickly, and because if
they hold they bias every gradient-driven PENTRC result.
The observation: PENTRC's thermodynamic drive frequencies appear inconsistent
with the kinetic profiles PENTRC itself reads. The stored
omega_Tis low by aradius-dependent factor of roughly 1.7.
The inconsistency
At
psi_n = 0.257on the TC24 case:omega_Tas stored and used by PENTRC676.7rad/sdlnT/dpsi_n-0.874dlnT/dpsi_n-0.878plasma.indlnT/dpsi_n, same case-0.878So the inputs agree to better than a percent across codes —
T_iis15307eV against NEO-RT's15306eV, andwexbis4856againstOm_tE = 4863. The disagreement is internal to PENTRC: what it stores asomega_Tdoes not follow from the profile it read.What the evidence narrows it to
Three observations. Together they narrow the possibilities; we want to be
explicit that they do not by themselves prove a spline-evaluation defect:
omega_Truns at0.49of theprofile-implied value in the core and
0.82at the edge. This rules out aconstant normalisation, though not a coordinate change as such: a
psi_pol-to-psi_tor-to-rhotransformation has a radius-dependentderivative Jacobian and would also look like this on its own.
omega_Nandomega_Tdeviate differently at the samepsi—omega_Ngoes
0.80to1.00over the same range. This excludes one commonmultiplicative derivative Jacobian shared by both, which is what a plain
coordinate change would give. It does not exclude every interpolation,
input-selection or per-quantity normalisation error.
read_kin's double-spline chain reproduces thecorrect derivative. So the profile data and the intended chain are fine;
what differs is the DCON spline
f1evaluation actually used throughinputs.f90/torque.F90kin%f1.Taken together these point at the derivative returned by the spline evaluation
for the kinetic profiles rather than at the profiles, the input file, or the
definition of
omega_T— but that is our leading hypothesis, not something theevidence above establishes.
For orientation in the source:
read_kinfits the input grid, resamples onto 101uniform
psi_npoints and fits again (pentrc/inputs.f90:212-246,:277);torque.F90:310evaluateskinand its derivative and useskin_f1inwdian/wdiatat:314-315; output useskin%f1independently attorque.F90:1891-1904.Consequences
omega_*N,omega_*Tis too small by up to ~1.7xwherever gradients dominate, i.e. at large resonant energy
x_res.x0is8.46as PENTRC runs,5.64withcorrected gradients, against NEO-RT's
5.52and a first-principles estimateof about
5.2. With the gradients corrected the two codes' physical drivesagree; as-run they do not.
against NEO-RT sit at
0.5-0.9, which reads as reasonable; corrected forthis deficit they move to about
1.2/0.9/1.5. The apparent agreement waspartly this bug cancelling against a real difference.
quasi-degenerate passing harmonic (
x_res ~ 0.1-2.6,omega_E-dominated)the effect is only about 8%.
What would close it
Compare, for one surface and one species, the derivative
kin%f1returns againsta direct finite difference of
kin%fon the same abscissa. They should agree tospline accuracy. That check is independent of any NTV physics and needs no torque
run, so it should settle the question in minutes either way.
What we can supply
We deliberately have not pasted a reproduction recipe we did not execute. If this
looks plausible to you we will obtain from Philipp and post here the exact GPEC
commit, compiler and build options, the input deck, the relevant output files and
the comparison script, so it can be reproduced rather than argued about.