diff --git a/src/coreComponents/physicsSolvers/NonlinearSolverParameters.cpp b/src/coreComponents/physicsSolvers/NonlinearSolverParameters.cpp index d50a3f79152..93955523260 100644 --- a/src/coreComponents/physicsSolvers/NonlinearSolverParameters.cpp +++ b/src/coreComponents/physicsSolvers/NonlinearSolverParameters.cpp @@ -104,8 +104,9 @@ NonlinearSolverParameters::NonlinearSolverParameters( string const & name, registerWrapper( viewKeysStruct::allowNonConvergedString(), &m_allowNonConverged ). setApplyDefaultValue( 0 ). setInputFlag( InputFlags::OPTIONAL ). - setDescription( "Allow non-converged solution to be accepted. " - "(i.e. exit from the Newton loop without achieving the desired tolerance)" ); + setDescription( "When enabled, the simulation can continue even with a non-converged solution (residuals exceeding the tolerance during the " + "newton loops) at the deepest level of sub-timesteps (maxSubSteps).\n" + "When disabled, the simulation will stop with an error when no converged solution has been found at the last sub-step level." ); registerWrapper( viewKeysStruct::timeStepDecreaseIterLimString(), &m_timeStepDecreaseIterLimit ). setApplyDefaultValue( 0.7 ). diff --git a/src/coreComponents/physicsSolvers/PhysicsSolverBase.cpp b/src/coreComponents/physicsSolvers/PhysicsSolverBase.cpp index 8d05dfd6958..ad68e0d7ba7 100644 --- a/src/coreComponents/physicsSolvers/PhysicsSolverBase.cpp +++ b/src/coreComponents/physicsSolvers/PhysicsSolverBase.cpp @@ -367,9 +367,19 @@ bool PhysicsSolverBase::execute( real64 const time_n, getName(), subStep, dtAccepted, nextDt, dtRemaining ) ); } } - GEOS_ERROR_IF( dtRemaining > 0.0, - "Maximum allowed number of sub-steps reached. Consider increasing maxSubSteps.", - getDataContext() ); + + if( m_nonlinearSolverParameters.m_allowNonConverged ) + { + GEOS_WARNING_IF( dtRemaining > 0.0 && MpiWrapper::commRank() == 0, + "Maximum allowed number of sub-steps reached but non-converged solutions are allowed so the simulation will continue with potentially inaccurate results.", + getDataContext(), getWrapperDataContext( NonlinearSolverParameters::viewKeysStruct::allowNonConvergedString()) ); + } + else + { + GEOS_ERROR_IF( dtRemaining > 0.0 && MpiWrapper::commRank() == 0, + "Maximum allowed number of sub-steps reached. Consider increasing maxSubSteps.", + getDataContext() ); + } // Decide what to do with the next Dt for the event running the solver. m_nextDt = setNextDt( time_n + dt, nextDt, domain ); diff --git a/src/coreComponents/schema/schema.xsd b/src/coreComponents/schema/schema.xsd index bd776c2bac0..4e5e210fb83 100644 --- a/src/coreComponents/schema/schema.xsd +++ b/src/coreComponents/schema/schema.xsd @@ -2452,7 +2452,8 @@ Information output from lower logLevels is added with the desired log level - + diff --git a/src/coreComponents/schema/schema.xsd.other b/src/coreComponents/schema/schema.xsd.other index 355f061e7f5..11e08ccc206 100644 --- a/src/coreComponents/schema/schema.xsd.other +++ b/src/coreComponents/schema/schema.xsd.other @@ -526,7 +526,7 @@ A field can represent a physical variable. (pressure, temperature, global compos - + @@ -1603,7 +1603,7 @@ A field can represent a physical variable. (pressure, temperature, global compos - +