Record gravity relift work before descent rejection

This commit is contained in:
2026-09-17 12:17:10 -04:00
parent b9e6794999
commit c82e68dd7e
3 changed files with 31 additions and 1 deletions

View File

@@ -72,6 +72,8 @@ export namespace mean_field::solver::nonlinear {
struct NumericalStrategyDiagnostics final {
int polynomialChecks{0};
// Nonzero repair proposals include directions later rejected by a
// descent check; this measures repair activity, not accepted steps.
int directionRepairs{0};
double lastRepairFraction{0.0};
double lastMeritDirectionalDerivative{0.0};

View File

@@ -440,6 +440,9 @@ namespace mean_field::solver::detail {
return false;
}
}
// A successful gravity relift still belongs in the work report if
// the following full-merit check rejects the repaired direction.
m_gravity.CopyDiagnostics(diagnostics);
if constexpr (altersDirection && std::same_as<Gravity, nonlinear::EliminatedGravity>) {
mfem::Vector action(state.Problem().EquationSize());
state.normalizedOperator->Mult(state.normalizedCorrection, action);
@@ -448,7 +451,6 @@ namespace mean_field::solver::detail {
if (!std::isfinite(diagnostics.lastMeritDirectionalDerivative) ||
diagnostics.lastMeritDirectionalDerivative >= 0.0) { return false; }
}
m_gravity.CopyDiagnostics(diagnostics);
return true;
}
auto PrepareTrial(State &state, const double alpha, nonlinear::NumericalStrategyDiagnostics &diagnostics) {