BUG: Real space WRITE access (interpolate) fails if some ranks are empty

Abierto
#5,485 0 comentarios 0 reacciones 1 asignado Ver en GitHub

Los mantenedores suelen responder en 1 día

@connorjward ya está trabajando en esto.

Desde el 24/9/2026.

Evaluación

Este issue todavía no se ha evaluado.

Descripción

bug

The MFE (run with 3 processes)

from firedrake import *

mesh = UnitSquareMesh(1, 1)
vom = VertexOnlyMesh(mesh, [[0.7, 0.7]])

print(f"{mesh.comm.rank}: {vom.cell_set.size = }")

R = FunctionSpace(vom, "R", 0)
f = Function(R)

f.interpolate(666)
print(f"{mesh.comm.rank}: {f.dat.data_ro = }")

prints

0: vom.cell_set.size = np.int64(0)
1: vom.cell_set.size = np.int64(1)
2: vom.cell_set.size = np.int64(0)

0: f.dat.data_ro = array([0.])
1: f.dat.data_ro = array([666.])
2: f.dat.data_ro = array([0.])

When f.dat.data_ro should report 666 on all ranks.

This issue is occurring because the op2.Global underlying f is only getting touched on the single rank that has an owned point. Other ranks have zero sized parloops and so the value never gets set.

To corroborate this, the problem goes away if one does f.interpolate(666, access=op2.INC). This is because at the end of the parloop we do a reduction, so contributions from all ranks are included.

Lenguaje dominante
Python
Estrellas
684
Forks
204
Merge medio
4 d 14 h
PR fusionados (30 d)
46

Preparar el entorno

  • Sin Dockerfile ni archivo de Docker Compose
  • Tiene una plantilla de pull request
  • Sin guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de firedrakeproject/firedrake

Todos los issues de firedrakeproject/firedrake

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.