Skip to content

PENTRC omega_T appears inconsistent with its own kinetic profile (reported, not yet reproduced by us) #283

Description

@krystophny

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:

  1. 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.
  2. omega_N and omega_T deviate differently at the same psiomega_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.
  3. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions