BUG: Checkpointing index failure with ExtrudedMesh.

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

Los mantenedores suelen responder en 1 día

@JHopeCollins ya está trabajando en esto.

Desde el 4/3/2026.

Evaluación

Este issue todavía no se ha evaluado.

Descripción

bug

Describe the bug

Checkpointing fails with appending mode after 157 iterations within a KSP monitor function.

Steps to Reproduce

Here is the MFE to reproduce the bug.

from firedrake import *
from petsc4py import PETSc
print = PETSc.Sys.Print

m = PeriodicIntervalMesh(10, 1.0)
mesh = ExtrudedMesh(m, 20, extrusion_type='uniform')
x, y = SpatialCoordinate(mesh)
CG = FiniteElement("CG", interval, 1)
DG = FiniteElement("DG", interval, 0)
CG_DG = TensorProductElement(CG, DG)
RT_horiz = HDivElement(CG_DG)
DG_CG = TensorProductElement(DG, CG)
RT_vert = HDivElement(DG_CG)
RT_e = RT_horiz + RT_vert
V_2D = FunctionSpace(mesh, RT_e)
Pressure = FunctionSpace(mesh, 'DG', 0)
W = V_2D * Pressure
U = Function(W)
u, p = split(U)
w, phi = TestFunctions(W)

f = Function(V_2D).project(as_vector([x ** 2 + y ** 2, x*y]))
equ = inner(u, w) * dx  + p * phi * dx - inner(f, w) * dx

params = {
    'snes_type': 'ksponly',
    'snes_max_it':200,
    'ksp_type':'gmres',
    'ksp_monitor':None,
    'ksp_atol': 0,
    'ksp_rtol':1e-50,
    'ksp_max_it': 200,
    'ksp_gmres_restart':1000,
    'pc_type': 'none',
}

nprob = NonlinearVariationalProblem(equ, U)
nsolver = NonlinearVariationalSolver(nprob, solver_parameters= params)
sol_it = Function(W, name='sol_it')

def monitor(ksp, iteration_number, norm0):
    if iteration_number == 0:
        with CheckpointFile('sol_its.h5', 'w') as chk:
            print('Checkpointing the first solution.')
            chk.save_function(sol_it, idx=iteration_number, name=f'sol_{iteration_number}')
            print('Checkpointed the first solution.')
    else:
        with CheckpointFile('sol_its.h5', 'a') as chk:
            print(f'Checkpointing the solution at iteration {iteration_number}.')
            chk.save_function(sol_it, idx=iteration_number, name=f'sol_{iteration_number}')
            print(f'Checkpointed the solution at iteration {iteration_number}.')
nsolver.snes.ksp.setMonitor(monitor)
nsolver.solve()

Expected behavior

The monitor function for saving the solution after each iteration will fail after 157 iterations.

Error message

Traceback (most recent call last):
File "petsc4py/PETSc/petscksp.pxi", line 273, in petsc4py.PETSc.KSP_Monitor
File "/home/mh2520/molin/phd/yr2/data_test/../Boussinesq_implicit/checkpoint_mfe_it63.py", line 49, in monitor
with CheckpointFile('sol_its.h5', 'a') as chk:
File "/home/mh2520/developer-firedrake-2026-01/firedrake/firedrake/checkpointing.py", line 556, in exit
self.close()
File "/home/mh2520/developer-firedrake-2026-01/firedrake/firedrake/checkpointing.py", line 1728, in close
self.viewer.destroy()
File "petsc4py/PETSc/Viewer.pyx", line 176, in petsc4py.PETSc.Viewer.destroy
petsc4py.PETSc.Error: error code 76
[0] PetscViewerDestroy() at /home/mh2520/petsc-firedrake/petsc/src/sys/classes/viewer/interface/view.c:101
[0] PetscViewerDestroy_HDF5() at /home/mh2520/petsc-firedrake/petsc/src/sys/classes/viewer/impls/hdf5/hdf5v.c:128
[0] PetscViewerFileClose_HDF5() at /home/mh2520/petsc-firedrake/petsc/src/sys/classes/viewer/impls/hdf5/hdf5v.c:109
[0] Error in external library
[0] Error in HDF5 call H5Fclose() Status -1

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/home/mh2520/molin/phd/yr2/data_test/../Boussinesq_implicit/checkpoint_mfe_it63.py", line 55, in
nsolver.solve()
File "petsc4py/PETSc/Log.pyx", line 250, in petsc4py.PETSc.Log.EventDecorator.decorator.wrapped_func
File "petsc4py/PETSc/Log.pyx", line 251, in petsc4py.PETSc.Log.EventDecorator.decorator.wrapped_func
File "/home/mh2520/developer-firedrake-2026-01/firedrake/firedrake/adjoint_utils/variational_solver.py", line 108, in wrapper
out = solve(self, **kwargs)
File "/home/mh2520/developer-firedrake-2026-01/firedrake/firedrake/variational_solver.py", line 393, in solve
self.snes.solve(None, work)
File "petsc4py/PETSc/SNES.pyx", line 1740, in petsc4py.PETSc.SNES.solve
petsc4py.PETSc.Error: error code 101
[0] SNESSolve() at /home/mh2520/petsc-firedrake/petsc/src/snes/interface/snes.c:4914
[0] SNESSolve_KSPONLY() at /home/mh2520/petsc-firedrake/petsc/src/snes/impls/ksponly/ksponly.c:49
[0] KSPSolve() at /home/mh2520/petsc-firedrake/petsc/src/ksp/ksp/interface/itfunc.c:1094
[0] KSPSolve_Private() at /home/mh2520/petsc-firedrake/petsc/src/ksp/ksp/interface/itfunc.c:915
[0] KSPSolve_GMRES() at /home/mh2520/petsc-firedrake/petsc/src/ksp/ksp/impls/gmres/gmres.c:215
[0] KSPGMRESCycle() at /home/mh2520/petsc-firedrake/petsc/src/ksp/ksp/impls/gmres/gmres.c:129
[0] KSPMonitor() at /home/mh2520/petsc-firedrake/petsc/src/ksp/ksp/interface/itfunc.c:2277

Environment:

  • Linux Ubuntu 22.04.4 LTS
  • Python version: 3.10.12
  • Firedrake is installed with developer mode.
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.