From 351423bcdaf937a6ff9cbdd671222766b06702bc Mon Sep 17 00:00:00 2001 From: Ray Speth Date: Tue, 4 Dec 2012 20:28:59 +0000 Subject: [PATCH] [1D] Added a new log level for saving intermediate solutions Running Sim1D::solve with loglevel set to 7 or higher will now save the solution after each attempted steady-state solution, after timestepping, and after regridding to the file 'debug_sim1d.xml'. This can be useful for diagnosing convergence issues with some problems. --- src/oneD/Sim1D.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/oneD/Sim1D.cpp b/src/oneD/Sim1D.cpp index 231500ec5..f14aaa261 100644 --- a/src/oneD/Sim1D.cpp +++ b/src/oneD/Sim1D.cpp @@ -301,16 +301,27 @@ void Sim1D::solve(int loglevel, bool refine_grid) writelog("]"); writelog(" point grid(s).\n"); } + if (loglevel > 6) { + save("debug_sim1d.xml", "debug", + "After successful Newton solve"); + } ok = true; soln_number++; } else { char buf[100]; if (loglevel > 0) { writelog(" failure. \n"); + if (loglevel > 6) { + save("debug_sim1d.xml", "debug", + "After unsuccessful Newton solve"); + } writelog("Take "+int2str(nsteps)+" timesteps "); } dt = timeStep(nsteps, dt, DATA_PTR(m_x), DATA_PTR(m_xnew), loglevel-1); + if (loglevel > 6) { + save("debug_sim1d.xml", "debug", "After timestepping"); + } if (loglevel == 1) { sprintf(buf, " %10.4g %10.4g \n", dt, log10(ssnorm(DATA_PTR(m_x), DATA_PTR(m_xnew)))); @@ -337,6 +348,9 @@ void Sim1D::solve(int loglevel, bool refine_grid) if (refine_grid) { new_points = refine(loglevel); + if (new_points && loglevel > 6) { + save("debug_sim1d.xml", "debug", "After regridding"); + } if (new_points < 0) { writelog("Maximum number of grid points reached."); new_points = 0;