Category: inaccuracy (latent, pre-existing; encoded in the golden record).
Several legacy Fortran files declare real(8)/real(dp) physics constants from
literals that are parsed at single precision (no _dp/d0 suffix, or an e
exponent), so a ~7-significant-figure value is stored in a double and then used
in double-precision physics. Example: 29979245800.0 (bare) rounds to
29979246592.0 — off by ~792, i.e. ~2.6e-8 relative.
These are not bugs introduced by the C++->Fortran port; they predate it and
the KiLCA golden record was generated with them, so they must not be "fixed"
in isolation — doing so shifts the golden outputs. (The port already had to
reproduce one of these: the KiLCA constants module keeps its single-precision
c for the legacy Fortran physics, while the ported-from-C++ modules carry a
local double c mirroring the oracle's constants.h; see PR #161.)
Affected (verified legacy, 0 lines changed vs the pre-port base)
KiLCA/hom_medium/hmedium.f90:21,23,106,108,351,352,408,409 — c = 29979245800.0, pi = 3.14159... (single).
KiLCA/imhd/imhd.f90:137,138,221,222 — pi, c (single).
KiLCA/math/W/wfunc.f90:11, wmfunc.f90:11, wm_asympt.f90:11 — pi = 3.141592653589793238462643383279502884197 (single).
KIM/src/util/constants_mod.f90:8 — sol = 29979245800.0 (single; used across kernels/electromagnetic_solver/species/calculate_equil).
KIM/src/util/constants_mod.f90:13 — kB = 1.380649e-16 (e exponent -> single: 1.3806490132968306e-16 vs 1.380649e-16).
Fix (deferred, requires golden regeneration)
Add explicit double-precision suffixes (_dp) / d-exponents to the literals,
consolidate onto a single shared constants module where possible, then
regenerate the KiLCA and KIM golden records and confirm the strict bar holds.
Coordinate with any golden exclusions.
Environment
Branch fortran-port-all (PR #161); files unchanged since the pre-port base.
Category: inaccuracy (latent, pre-existing; encoded in the golden record).
Several legacy Fortran files declare
real(8)/real(dp)physics constants fromliterals that are parsed at single precision (no
_dp/d0suffix, or aneexponent), so a ~7-significant-figure value is stored in a double and then used
in double-precision physics. Example:
29979245800.0(bare) rounds to29979246592.0— off by ~792, i.e. ~2.6e-8 relative.These are not bugs introduced by the C++->Fortran port; they predate it and
the KiLCA golden record was generated with them, so they must not be "fixed"
in isolation — doing so shifts the golden outputs. (The port already had to
reproduce one of these: the KiLCA
constantsmodule keeps its single-precisioncfor the legacy Fortran physics, while the ported-from-C++ modules carry alocal double
cmirroring the oracle'sconstants.h; see PR #161.)Affected (verified legacy, 0 lines changed vs the pre-port base)
KiLCA/hom_medium/hmedium.f90:21,23,106,108,351,352,408,409—c = 29979245800.0,pi = 3.14159...(single).KiLCA/imhd/imhd.f90:137,138,221,222—pi,c(single).KiLCA/math/W/wfunc.f90:11,wmfunc.f90:11,wm_asympt.f90:11—pi = 3.141592653589793238462643383279502884197(single).KIM/src/util/constants_mod.f90:8—sol = 29979245800.0(single; used across kernels/electromagnetic_solver/species/calculate_equil).KIM/src/util/constants_mod.f90:13—kB = 1.380649e-16(eexponent -> single: 1.3806490132968306e-16 vs 1.380649e-16).Fix (deferred, requires golden regeneration)
Add explicit double-precision suffixes (
_dp) /d-exponents to the literals,consolidate onto a single shared constants module where possible, then
regenerate the KiLCA and KIM golden records and confirm the strict bar holds.
Coordinate with any golden exclusions.
Environment
Branch
fortran-port-all(PR #161); files unchanged since the pre-port base.