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
-
+