During an adaptive transient simulation, a nonlinear iterate can produce a matrix that UMFPACK cannot numerically factorize. The resulting NgException currently escapes from the linear solver and terminates the entire simulation.
Adaptive solvers already reject and retry a time step when solve_single_step() returns False because the nonlinear iteration did not converge. A numerical factorization failure occurring during that nonlinear iteration should follow the same rejection path.
Current behavior
The simulation terminates with an exception similar to:
UMFPACK V5.7.4: WARNING: matrix is singular
netgen.libngpy._meshing.NgException:
UmfpackInverse: Numeric factorization failed.
The exception originates from:
a_assembled.mat.Inverse(
freedofs=freedofs,
inverse=inverse_solver, )
in BaseModel.linear_solve().
Because the exception is not converted into a failed nonlinear solve, the adaptive solver cannot discard the diverged iterate, reduce the time step, and retry.
During an adaptive transient simulation, a nonlinear iterate can produce a matrix that UMFPACK cannot numerically factorize. The resulting
NgExceptioncurrently escapes from the linear solver and terminates the entire simulation.Adaptive solvers already reject and retry a time step when
solve_single_step()returnsFalsebecause the nonlinear iteration did not converge. A numerical factorization failure occurring during that nonlinear iteration should follow the same rejection path.Current behavior
The simulation terminates with an exception similar to:
The exception originates from:
in BaseModel.linear_solve().
Because the exception is not converted into a failed nonlinear solve, the adaptive solver cannot discard the diverged iterate, reduce the time step, and retry.