Cover both density mass and EOS source in closure quadrature
This commit is contained in:
@@ -839,6 +839,38 @@ namespace prepared_barotropic_closure_test_utils {
|
||||
make_state_view(baseDensity, baseEnthalpy, baseDisplacement), make_dependencies()
|
||||
);
|
||||
|
||||
// Agreement with the stateless kernel alone cannot expose a
|
||||
// shared quadrature mistake. Check the actual prepared rule
|
||||
// against both form orders, allowing MFEM's odd-order aliases.
|
||||
int checkedRules = 0;
|
||||
preparedOperator.VisitMappedGeometryRules([&](const int element, const mfem::IntegrationRule &rule) {
|
||||
const auto &transformation = *f.mesh->GetElementTransformation(element);
|
||||
const int extraOrder = static_cast<int>(std::ceil(
|
||||
(condition.polytropicIndex - 1.0) * field::Enthalpy::Scalar::familyOrder
|
||||
));
|
||||
const auto sourceQuery = field::Field<field::Enthalpy>::make_query<
|
||||
field::Enthalpy::Form::EosClosureSource>(
|
||||
mean_field::quadrature::QuadratureRole::discretization, transformation.OrderW(),
|
||||
std::array<int, 1>{extraOrder}, mean_field::utils::DOMAINS::STELLAR,
|
||||
mean_field::quadrature::MappingKind::general
|
||||
);
|
||||
const auto massQuery = field::Field<field::Density>::make_query<
|
||||
field::Density::Form::EosClosureMass>(
|
||||
mean_field::quadrature::QuadratureRole::discretization, transformation.OrderW(), {},
|
||||
mean_field::utils::DOMAINS::STELLAR, mean_field::quadrature::MappingKind::general
|
||||
);
|
||||
const auto sourceResolution =
|
||||
f.quadratureFactory->get(sourceQuery, transformation.GetGeometryType());
|
||||
const auto massResolution =
|
||||
f.quadratureFactory->get(massQuery, transformation.GetGeometryType());
|
||||
INFO("Prepared closure element = " << element);
|
||||
INFO("Actual quadrature exactness = " << rule.GetOrder());
|
||||
CHECK(rule.GetOrder() >= sourceResolution.resolution.order);
|
||||
CHECK(rule.GetOrder() >= massResolution.resolution.order);
|
||||
++checkedRules;
|
||||
});
|
||||
CHECK(checkedRules > 0);
|
||||
|
||||
mfem::Vector preparedResidual;
|
||||
mfem::Vector preparedAction;
|
||||
preparedOperator.BuildResidual(preparedResidual);
|
||||
|
||||
Reference in New Issue
Block a user