Skip to content

Adjoint field dual is silently zero for a field that enters through a Dirichlet datum #787

Description

@lmoresi

solver.gradient(misfit, fields=[f]) returns the dual on a field the residual reads. A field that enters only through an essential datum, u|Γ = f (a prescribed velocity field on a wall, an observed temperature used as a boundary value), is not seen: the field route scans the residual, not the boundary data, so the dual comes back zero and nothing says so. The scalar-parameter case was #762; this is its field counterpart.

The term is the same reaction, [(Kᵀμ)_Γ + (∂J/∂u)_Γ] restricted to the constrained rows and mapped onto the field's own nodes (a projection when the spaces differ). Until it is built, a field found in an essential datum should refuse rather than return zero.

Branch feature/discrete-adjoint, PR #744.

Activity

  1. lmoresi commented on Oct 7, 2026

    @lmoresi
    MemberAuthor

    Not reproducible on development (7c9cbbfd) — the adjoint API is not there:

    uw.adjoint present:        False
    Stokes adjoint API:        []
    files with 'adjoint' in the path: 0
    

    Only scattered references remain (one line in petsc_generic_snes_solvers.pyx, five in mcp/__init__.py, eight in transcript_query.py), not the implementation. So this defect lives in unmerged work — feature/discrete-adjoint (#744, currently conflicting and red), feature/adjoint-rotated-bc (#751, based on #744), or scratch/adjoint-merge.

    That is why it has sat untouched: there is nothing on the main line to fix. It is not fixed-in-PR — the opposite. It has to be fixed on the branch before that branch lands, or it lands with the defect.

    Checked in the untouched-issue triage. Blocked behind #744, which needs its conflicts resolved and a CI re-run (its red check is test_1063_constrained_traction, whose timeout #814 addressed when it merged on 2026-10-06).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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