From 2326b07c681b3c859d37e3823c82218b4f034d5e Mon Sep 17 00:00:00 2001 From: Ray Speth Date: Fri, 12 Apr 2013 23:06:05 +0000 Subject: [PATCH] [1D] Reset timestep after grid refinement This addresses a performance issue where many failed timesteps would be taken after adding new grid points. These failed timesteps are slow because they require additional Jacobian re-evaluations. It is more efficient to preemptively reduce the time step after adding new grid points. Resolves Issue 155. --- src/oneD/Sim1D.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/oneD/Sim1D.cpp b/src/oneD/Sim1D.cpp index c902f0fd1..a3a9e5dbe 100644 --- a/src/oneD/Sim1D.cpp +++ b/src/oneD/Sim1D.cpp @@ -365,6 +365,11 @@ void Sim1D::solve(int loglevel, bool refine_grid) if (refine_grid) { new_points = refine(loglevel); + if (new_points) { + // If the grid has changed, preemptively reduce the timestep + // to avoid multiple successive failed time steps. + dt = m_tstep; + } if (new_points && loglevel > 6) { save("debug_sim1d.xml", "debug", "After regridding"); }