Foam::structuredDecomp::structuredDecomp(const dictionary& decompositionDict) : decompositionMethod(decompositionDict), methodDict_(decompositionDict_.subDict(typeName + "Coeffs")), patches_(methodDict_.lookup("patches")) { methodDict_.set("numberOfSubdomains", nDomains()); method_ = decompositionMethod::New(methodDict_); }
void Sim1D::solve(int loglevel, bool refine_grid) { int new_points = 1; int nsteps; doublereal dt = m_tstep; int soln_number = -1; finalize(); while (new_points > 0) { size_t istep = 0; nsteps = m_steps[istep]; bool ok = false; if (loglevel > 0) { writeline('.', 78, true, true); } while (!ok) { writelog("Attempt Newton solution of steady-state problem...", loglevel); int status = newtonSolve(loglevel-1); if (status == 0) { if (loglevel > 0) { writelog(" success.\n\n"); writelog("Problem solved on ["); for (size_t mm = 1; mm < nDomains(); mm+=2) { writelog(int2str(domain(mm).nPoints())); if (mm + 2 < nDomains()) { writelog(", "); } } writelog("] point grid(s).\n"); } if (loglevel > 6) { save("debug_sim1d.xml", "debug", "After successful Newton solve"); } if (loglevel > 7) { saveResidual("debug_sim1d.xml", "residual", "After successful Newton solve"); } ok = true; soln_number++; } else { char buf[100]; writelog(" failure. \n", loglevel); if (loglevel > 6) { save("debug_sim1d.xml", "debug", "After unsuccessful Newton solve"); } if (loglevel > 7) { saveResidual("debug_sim1d.xml", "residual", "After unsuccessful Newton solve"); } writelog("Take "+int2str(nsteps)+" timesteps ", loglevel); 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 > 7) { saveResidual("debug_sim1d.xml", "residual", "After timestepping"); } if (loglevel == 1) { sprintf(buf, " %10.4g %10.4g \n", dt, log10(ssnorm(DATA_PTR(m_x), DATA_PTR(m_xnew)))); writelog(buf); } istep++; if (istep >= m_steps.size()) { nsteps = m_steps.back(); } else { nsteps = m_steps[istep]; } dt = std::min(dt, m_tmax); } } if (loglevel > 0) { writeline('.', 78, true, true); } if (loglevel > 2) { showSolution(); } 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"); } if (new_points && loglevel > 7) { saveResidual("debug_sim1d.xml", "residual", "After regridding"); } if (new_points < 0) { writelog("Maximum number of grid points reached."); new_points = 0; } } else { writelog("grid refinement disabled.\n", loglevel); new_points = 0; } } }