Skip to content

QL: Lorentz join normalizes an exact-zero propagator column #134

Description

@krystophny

Problem

The Lorentz flux-conservation correction in NEO-2-QL/join_ripples.f90 divides every joined propagator column by its column sum without handling an exact-zero column.

At current stacked head 03f5b9dacdbf7c882fac01c37972e8e266575351, a Debug build with bounds checking and -ffpe-trap=invalid reaches:

join_ripples.f90:294
facnorm = 0
amat_p_p(1,2) = 0
amat_p_m(1,2) = 0
SIGFPE: 0/0

Context:

i = 2
npass_l = 24
npass_r = 24
old propagator tags = 12..13
new propagator tags = 13..13

The collision operator and propagators complete before this fault. No earlier NaN, IEEE exception, or failed linear-solve diagnostic appears in the trapped run.

Expected behavior

The flux-conservation correction must define and verify the intended behavior for a zero incoming propagator column. It must not silently create NaNs or divide by zero. Nonzero columns must retain the existing normalization and conservation law.

Acceptance

  • Add a behavioral fixture that reaches a joined exact-zero Lorentz column and fails before the repair.
  • Define the physical meaning of the zero column: impossible state, removable empty channel, or upstream assembly defect.
  • Preserve column-sum-one normalization for every nonzero column.
  • Reject an impossible zero column with stage, index, dimensions, tags, and finite-value diagnostics, or handle a physically empty channel with an explicitly justified invariant.
  • Run the full native suite and a bounds-checked source-only helical-geometry case.
  • Verify no IEEE invalid flag and finite final transport outputs.

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