Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Slice.to_global puts the second-to-last node row on the domain's upper faces

Abierto Apto para principiantes
#123 0 comentarios 0 reacciones 0 asignados Ver en GitHub

@chraibi ya está trabajando en esto.

Desde el 6/10/2026.

  • #124 de @chraibi — abierto

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
82/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
python
Área
data

Línea de trabajo

Lee el bloque „We ignore border points“ en slcf/slice.py (líneas 614–638 en 1.11.7), luego ejecuta la reproducción proporcionada para Slice.to_global(). Hecho significa que los slices basados en nodos conservan los últimos valores escritos por FDS en las caras y la esquina de máximo global, mientras que los slices centrados en celdas permanecen sin cambios.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Slice.to_global() (slcf/slice.py, the "We ignore border points ..." block;
1.11.7 lines 614-638, unchanged on the default branch at c5aac2a) writes the wrong values
into the node row at the global maximum of a node-based slice. For each axis it
first drops the mesh's last node (reduced_shape[axis + 1] -= 1) and only then
saves the "border points" from the shortened array, so the node appended at the
global maximum is the original second-to-last node. Cell-centred slices skip
this block and are not affected. Same code block as #121 (dropped upper-face nodes), distinct defect.

Reproduction (one mesh [0, 1] x [0, 1], node spacing 0.5, horizontal
node-based slice, FDS data K = x + 10 y; the mesh and subslice are fdsreader's
own classes, only the data is set):

import numpy as np
from fdsreader.fds_classes.mesh import Mesh
from fdsreader.slcf.slice import Slice, SubSlice
from fdsreader.utils.extent import Extent

class OneMeshSlice:
    to_global = Slice.to_global
    subslices = Slice.subslices
    orientation, id, n_t, times, cell_centered = 3, "s", 1, np.array([0.0]), False

    def __init__(self):
        nodes = {"x": np.array([0.0, 0.5, 1.0]), "y": np.array([0.0, 0.5, 1.0]),
                 "z": np.array([0.0, 1.0, 2.0])}
        mesh = Mesh(nodes, {"x": (0.0, 1.0), "y": (0.0, 1.0), "z": (0.0, 2.0)}, "M")
        sub = SubSlice(self, "", None, Extent(0.0, 1.0, 0.0, 1.0, 1.0, 1.0), mesh)
        X, Y = np.meshgrid(nodes["x"], nodes["y"], indexing="ij")
        sub._data = (X + 10 * Y)[None].astype(np.float32)  # as FDS wrote it, (t, x, y)
        self._subslices = {"M": sub}
        self.extent = Extent(0.0, 1.0, 0.0, 1.0, 1.0, 1.0)

print(np.asarray(OneMeshSlice().to_global())[0])

FDS data (rows over x): to_global() returns:
[[0. 5. 10. ] [[0. 5. 5. ]
[0.5 5.5 10.5] [0.5 5.5 5.5]
[1. 6. 11. ]] [0.5 5.5 5.5]]

The y = 1 entries repeat y = 0.5, the x = 1 row repeats x = 0.5, and the corner
(1, 1) is 5.5 (the node (0.5, 0.5)) instead of 11. Reproduced on 1.11.5,
1.11.6, 1.11.7, 1.11.9, 1.12.0 and 1.12.1. The same setup with a cell-centred
slice returns the data unchanged.

Expected: the node row at the global maximum is the last node row FDS wrote.

On a real deck (L-shaped corridor, 8 meshes at 0.25 m, SOOT EXTINCTION
COEFFICIENT at z = 2.0 m, FDS 6.10.1) 153 nodes on the upper faces y = 28 m
and x = 45 m are affected; the values differ from the written last node by up
to 0.33 1/m.

Suggested fix: save the border slice (temp_data, and temp_mask when
masked) from the unreduced array, i.e. before slc_data is shortened, and
append it after the repeat as now.

Found through fdsvismap, which reads slices with to_global().

Lenguaje dominante
Python
Estrellas
75
Forks
28
Merge medio
2 min
PR fusionados (30 d)
2

Preparar el entorno

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 FireDynamics/fdsreader

Todos los issues de FireDynamics/fdsreader

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.