Make zero-correction strategy fixture independent of equality stopping

This commit is contained in:
2026-09-17 09:50:21 -04:00
parent 4ae2f3f134
commit 485e802453

View File

@@ -111,8 +111,11 @@ namespace stellar_numerical_strategy_test {
}
[[nodiscard]] nonlinear::NewtonOptions oneAttempt() {
// A relative threshold of exactly ||b|| need not stop MFEM before
// its first iteration. Use a separated absolute threshold so this
// wiring test deliberately retains its zero initial correction.
return {.relativeTolerance = 0.0, .absoluteTolerance = 0.0, .maximumIterations = 1,
.linearSolve = {.relativeTolerance = 1.0, .absoluteTolerance = 0.0, .maximumIterations = 1},
.linearSolve = {.relativeTolerance = 0.0, .absoluteTolerance = 1.e100, .maximumIterations = 1},
.backtracking = {.maximumTrials = 1, .geometryPreflight = false}};
}
@@ -159,6 +162,8 @@ TEST_CASE("Production gravity strategies retain optional model borders and resto
CHECK_FALSE(report.converged());
CHECK(report.diagnostics().attemptedNonlinearIterations == 1);
CHECK(report.diagnostics().acceptedNonlinearIterations == 0);
REQUIRE(report.diagnostics().lastLinearSolve.has_value());
CHECK(report.diagnostics().lastLinearSolve->iterations == 0);
CHECK(report.diagnostics().numericalStrategies.gravitySolves > 0);
CHECK(report.diagnostics().numericalStrategies.gravityFailures == 0);
CHECK(report.lastAcceptedCheckpointView().valid());
@@ -172,6 +177,8 @@ TEST_CASE("Production gravity strategies retain optional model borders and resto
CHECK_FALSE(report.converged());
CHECK(report.diagnostics().attemptedNonlinearIterations == 1);
CHECK(report.diagnostics().acceptedNonlinearIterations == 0);
REQUIRE(report.diagnostics().lastLinearSolve.has_value());
CHECK(report.diagnostics().lastLinearSolve->iterations == 0);
CHECK(report.diagnostics().numericalStrategies.gravitySolves > 0);
CHECK(report.diagnostics().numericalStrategies.gravityFailures == 0);
CHECK(std::isfinite(report.diagnostics().numericalStrategies.lastLiftedRelativeTrueResidual));