Reject unsupported pressure traces before polynomial state certification

This commit is contained in:
2026-09-17 10:15:57 -04:00
parent 6e812aeca2
commit 071417f0c1
3 changed files with 61 additions and 0 deletions

View File

@@ -4,10 +4,12 @@
#include <limits>
#include <numeric>
#include <span>
#include <type_traits>
#include <vector>
#include <catch2/catch_approx.hpp>
#include <catch2/catch_test_macros.hpp>
#include <catch2/matchers/catch_matchers.hpp>
#include <mfem.hpp>
#include <mpi.h>
@@ -199,3 +201,18 @@ TEST_CASE("Feasible direction repair enforces exact homogeneous trace and reject
CHECK(prepared.MinimumRepairFraction(invalidTrace,anchor,direction).status ==
EnthalpyDirectionRepairStatus::invalid_base);
}
TEST_CASE("Polynomial enthalpy validates the physical surface prescription before inspecting a state",
"[solver][enthalpy_admissibility][unit][parallel]") {
using namespace mean_field;
const eos::Polytrope equationOfState({.n=1.0,.K=1.0});
const auto zero = surface::compilePressureSurfaceConstraint<surface::BarotropicSurfaceFormulation>(
surface::Isobaric({.Psurf=dimensions::PressureValue{0.0}}),equationOfState);
STATIC_CHECK(solver::detail::PolynomialEnthalpySurfaceConstraint<std::remove_cvref_t<decltype(zero)>>);
REQUIRE_NOTHROW(solver::detail::RequirePolynomialEnthalpySurface(zero,equationOfState,MPI_COMM_WORLD));
int rank = 0; MPI_Comm_rank(MPI_COMM_WORLD,&rank);
const auto positive = surface::compilePressureSurfaceConstraint<surface::BarotropicSurfaceFormulation>(
surface::Isobaric({.Psurf=dimensions::PressureValue{rank == 0 ? 0.01 : 0.0}}),equationOfState);
CHECK_THROWS_WITH(solver::detail::RequirePolynomialEnthalpySurface(positive,equationOfState,MPI_COMM_WORLD),
"PolynomialEnthalpy supports only zero prescribed surface pressure (Psurf=0).");
}