BUG: Real Space Forms are sometimes assembled incorrectly

Aperta
#5,480 1 commento 0 reazioni 1 assegnatario Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

@connorjward ci sta già lavorando.

Dal 23/9/2026.

Valutazione

Questa issue non è ancora stata valutata.

Descrizione

bug

Forms are sometimes assembled incorrectly. See the MWE below.

This is probably an important issue. It was causing instabilities in an Irksome script of mine, since Irksome internally uses real spaces in the MeshConstant class.

I presume the issue is due to compiler optimisations; the problem goes away by setting PYOP2_CFLAGS=-fno-tree-loop-vectorize.

from firedrake import *

mesh = UnitSquareMesh(5, 5)

# Create a vector function, and a real function
U = VectorFunctionSpace(mesh, "CG", 2)
u = Function(U).interpolate(as_vector((1, 0)))

R = FunctionSpace(mesh, "R", 0)
alpha = Function(R).assign(0)

# Compute errors between functionals, using different measures
def errors(measure):

    # Create two functionals acting on Q = CG1
    Q = FunctionSpace(mesh, "CG", 1)
    q = TestFunction(Q)

    F = dot(u, grad(q))*measure     # This functional is non-zero
    zero_term = alpha*q*measure     # This functional is zero

    # Form the Riesz representers of the functionals
    combined = assemble(F + zero_term).riesz_representation("l2")
    original = assemble(F).riesz_representation("l2")
    zero = assemble(zero_term).riesz_representation("l2")

    return errornorm(combined, original), norm(zero)

# Compute errors for default and degree-15 measures
default = errors(dx)
degree_15 = errors(dx(degree=15))

print(f"default:   difference={default[0]:.3e}, zero term={default[1]:.3e}")
print(f"degree 15: difference={degree_15[0]:.3e}, zero term={degree_15[1]:.3e}")

# SCRIPT OUTPUT:
# default:   difference=7.676e-18, zero term=0.000e+00
# degree 15: difference=3.546e-03, zero term=0.000e+00
Lingua principale
Python
Stelle
684
Fork
204
Merge medio
4g 14h
PR unite (30g)
46

Preparare l'ambiente

  • Nessun Dockerfile né file Docker Compose
  • Ha un modello di pull request
  • Nessuna guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di firedrakeproject/firedrake

Tutte le issue di firedrakeproject/firedrake

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.