Mark unvisited enthalpy repair checks as unresolved

This commit is contained in:
2026-09-17 10:00:46 -04:00
parent 6b10e68ed3
commit 5f3eb0b18c
2 changed files with 9 additions and 5 deletions

View File

@@ -53,9 +53,11 @@ export namespace mean_field::solver {
double meritDirectionalDerivative{std::numeric_limits<double>::quiet_NaN()};
double linearModelResidualNorm{std::numeric_limits<double>::quiet_NaN()};
int jacobianApplications{0};
PolynomialSignReport base;
PolynomialSignReport anchor;
PolynomialSignReport candidate;
// Early rejection can leave later checks unvisited. Such a report is
// never evidence of feasibility, even though the empty-domain check is.
PolynomialSignReport base{.status = PolynomialSignStatus::unresolved};
PolynomialSignReport anchor{.status = PolynomialSignStatus::unresolved};
PolynomialSignReport candidate{.status = PolynomialSignStatus::unresolved};
};
}

View File

@@ -157,8 +157,10 @@ TEST_CASE("Prepared admissibility preserves shared true DOFs and rejects an inva
const auto repeated = prepared.MinimumRepairFraction(base,anchor,direction);
CHECK(repeated.minimumSafeFraction == repair.minimumSafeFraction);
mfem::Vector invalid(base); invalid *= -1.0;
CHECK(prepared.MinimumRepairFraction(invalid,anchor,direction).status ==
EnthalpyDirectionRepairStatus::invalid_base);
const auto invalidBase = prepared.MinimumRepairFraction(invalid,anchor,direction);
CHECK(invalidBase.status == EnthalpyDirectionRepairStatus::invalid_base);
CHECK(invalidBase.anchor.status == PolynomialSignStatus::unresolved);
CHECK(invalidBase.candidate.status == PolynomialSignStatus::unresolved);
int rank = 0; MPI_Comm_rank(MPI_COMM_WORLD,&rank);
mfem::Vector nonfinite(base);
if (rank == 0 && nonfinite.Size()) nonfinite(0) = std::numeric_limits<double>::quiet_NaN();