Reject unsupported pressure traces before polynomial state certification
This commit is contained in:
@@ -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).");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user