Skip to content

QL: intermediate propagator join discards DGBSV failure details #127

Description

@krystophny

Reproduction

Build NEO-2-QL at 4b00b887b6a9c37928b6575130b9ad494d2cdc2b
with GNU bounds checks:

cmake -S . -B /tmp/neo2-debug -G Ninja \
  -DCMAKE_BUILD_TYPE=Debug \
  -DCMAKE_Fortran_FLAGS='-fcheck=all -fbacktrace -g -O0' \
  -DLIBNEO_REF=13387c26305fec88158ff109516a10729e2df206
cmake --build /tmp/neo2-debug --target neo_2_ql.x

Run one electron species on a HELCORE-type l=1 Boozer geometry with the
fileless, driven non-axisymmetric path:

&ntv_input
  isw_ntv_mode = 0
  isw_qflux_NA = 1
  in_file_pert = 'none'
  isw_m_phi_input = 1
  m_phi_input = -1
  isw_ripple_solver = 3
  isw_hel_drive = 1
  m_theta_hel = 1
  hel_phim_re = 1.0d0
/

The case uses iota=0.99, nperiod=1000, phi_split_mode=1,
phi_place_mode=1, bin_split_mode=0, max_solver_try=10, and one MPI rank.
It triggers normal ierr=3 mode-3 refinement retries, completes the local
propagator solves, and fails during intermediate propagator joining.

Expected

After successful local solves, the global propagators join and only final,
globally joined transport output is accepted. If the joining matrix is
singular or an argument is invalid, the diagnostic retains the LAPACK status,
join tags, and dimensions and exits through the normal MPI finalization path.

Actual

The run stops after the local solves:

solving completed
Error from Joining, ierr=           2
Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG

The control path is:

  • NEO-2-QL/propagator.f90:1403: intermediate join_ripples_interface
  • NEO-2-QL/propagator.f90:1830: join_ripples_nn
  • NEO-2-QL/join_ripples_int.f90:307-308: join_ripples
  • NEO-2-QL/join_ripples.f90:138: gbsv
  • NEO-2-QL/join_ripples.f90:140-142: every nonzero LAPACK info is reduced
    to ierr=2

COMMON/lapack_band.f90 calls DGBSV, where info<0 means an illegal
argument and info>0 means an exact zero U pivot. The actual value is lost,
so the present diagnostic cannot distinguish these cases. The IEEE flag is
reported at the explicit STOP; it is not established as the cause.

The run leaves qflux_ntv.dat and qflux_symm.dat, but those files are
written inside local ripple solves before global joining. They are partial
outputs and are not trustworthy as final transport results.

An optimized build diverges: it reaches join_ends, then faults while
assigning y_ntv_mod in ntv_mod.f90. This build-dependent endpoint raises
an initialization, lifetime, or ordering concern in addition to possible
join conditioning.

Environment

Evidence

The bounds-checked run took 147 s and used about 810 MiB RSS. It had no
npl(istep +/- 2) bounds failure, heap corruption, NaN, repeated zhseqr
failure, or segmentation fault before the join. Three mode-3 retries completed
normally. No final ntv_out, fulltransp, or multispecies HDF5 result was
produced.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions