Compile and verify radial coarse basis through existing FEM surface map

This commit is contained in:
2026-09-17 16:55:20 -04:00
parent b3bd244024
commit dc8d4b0501
2 changed files with 104 additions and 41 deletions

View File

@@ -163,22 +163,18 @@ namespace coarse_test {
template <class Model>
using Coarse = probe::PreparedCoupledShapeCoarse<NormalizedOperation<Model>, NormalizedInverse<Model>>;
// The experiment borrows the existing radial geometry rather than inventing
// a second nodal-coordinate map. Instantiation below checks actual solver
// types with optional generated borders, without a costly stellar fixture.
// The production problem erases its prepared deformation. Recompile only
// the existing surface prescription, then verify its actual runtime action.
// Explicit instantiations below keep both complete model paths checked.
template <class Model>
concept BorrowsRadialSurface = requires(const Problem<Model> &problem) {
concept ReusesRadialCompiler = requires(const Problem<Model> &problem) {
{
problem.GetPhysicalOperator().GetDomainDeformation().surfaceDeformationPrescription().radialDirection(0, 0)
} -> std::same_as<double>;
{
problem.GetPhysicalOperator().GetDomainDeformation().surfaceDeformationPrescription().referenceRadius(0)
} -> std::same_as<double>;
requires std::is_lvalue_reference_v<
decltype(problem.GetPhysicalOperator().GetDomainDeformation().surfaceDeformationPrescription())>;
probe::coupled_shape_detail::MakeDefaultRadialSurface(problem)
} -> std::same_as<deformation::PreparedNodalRadialSurface>;
requires probe::coupled_shape_detail::SupportsShapeModes<Problem<Model>, PhysicalInverse<Model>>;
};
static_assert(BorrowsRadialSurface<OrdinaryModel>);
static_assert(BorrowsRadialSurface<CentralModel>);
static_assert(ReusesRadialCompiler<OrdinaryModel>);
static_assert(ReusesRadialCompiler<CentralModel>);
static_assert(solver::LinearPreconditionerApplicationContractAvailable<Coarse<OrdinaryModel>>);
static_assert(solver::LinearPreconditionerApplicationContractAvailable<Coarse<CentralModel>>);
} // namespace coarse_test