From 485e80245374843b184fbeb13d7ea9cc0bfcffd8 Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Thu, 17 Sep 2026 09:50:21 -0400 Subject: [PATCH] Make zero-correction strategy fixture independent of equality stopping --- tests/solver/stellar_numerical_strategies.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tests/solver/stellar_numerical_strategies.cpp b/tests/solver/stellar_numerical_strategies.cpp index 4269b2b..ef9f8ee 100644 --- a/tests/solver/stellar_numerical_strategies.cpp +++ b/tests/solver/stellar_numerical_strategies.cpp @@ -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));