boundary_inputs.hpp serif/backend/mfem/discretization/coefficient_tracking.hpp serif/backend/mfem/geometry/surface/boundary_data.hpp serif/geometry/surface/samples.hpp src/include/serif/backend/mfem/geometry/surface/boundary_computations.hpp src/include/serif/backend/mfem/model/computations/pressure_boundary.hpp src/include/serif/backend/mfem/model/normalization/computations.hpp serif::geometry::surface::backend::mfem::keys::BoundaryDiscretization serif::geometry::surface::backend::mfem::keys::BoundarySamples serif::geometry::surface::backend::mfem::detail::BoundaryTracking serif serif::geometry serif::geometry::surface serif::geometry::surface::backend serif::geometry::surface::backend::mfem serif::geometry::surface::backend::mfem::keys serif::geometry::surface::backend::mfem::detail #pragmaonce #include"serif/backend/mfem/discretization/coefficient_tracking.hpp" #include"serif/backend/mfem/geometry/surface/boundary_data.hpp" #include"serif/geometry/surface/samples.hpp" namespaceserif::geometry::surface::backend::mfem { namespacekeys { structBoundaryDiscretization { }; template<typenameTerm> structBoundarySamples { }; } namespacedetail { structBoundaryTracking { template<typenameBoundary> [[nodiscard]]std::shared_ptr<constBoundary>capture(conststd::shared_ptr<constBoundary>&boundary)const { usingnamespaceutils::errors; serif_ensure<SERiFErrorCode::INVALID_ARGUMENT, std::invalid_argument>(boundary!=nullptr,"Pressure-boundaryinputsrequirecompiledboundarytraces."); boundary->validate(); returnboundary; } template<typenameBoundary> [[nodiscard]]boolmatches(conststd::shared_ptr<constBoundary>&captured,conststd::shared_ptr<constBoundary>&boundary)const { returncaptured==capture(boundary); } template<typenameBoundary> [[nodiscard]]constvoid*identity(conststd::shared_ptr<constBoundary>&boundary)const { returnboundary.get(); } }; } template<typenameBoundary,typenameEOSResource> [[nodiscard]]automake_pressure_boundary_metadata(std::shared_ptr<constBoundary>boundary,EOSResourceequation_of_state,IsobaricSurfacecondition) { usingnamespaceutils::dependencies; returnmake_dependency_context(own<keys::BoundaryDiscretization>(std::move(boundary),detail::BoundaryTracking{}), std::move(equation_of_state),pressure_condition(std::move(condition))); } namespacedetail { template<typenameBoundary,typenameEOSResource,typenameCoefficients,typename...Terms> [[nodiscard]]autopressure_boundary_inputs(std::shared_ptr<constBoundary>boundary,EOSResourceequation_of_state,IsobaricSurfacecondition,constCoefficients&coefficients,utils::dependencies::KeyList<Terms...>) { usingnamespaceutils::dependencies; returncombine_dependency_contexts(make_pressure_boundary_metadata(std::move(boundary),std::move(equation_of_state),std::move(condition)), make_dependency_context(own<Terms>(coefficients.templateget<Terms>(),discretization::backend::mfem::CoefficientTracking{})...)); } } template<typenameBoundary,utils::dependencies::IsResourceEOSResource,utils::dependencies::IsDependencyContextCoefficients> requiresstd::same_as<typenameEOSResource::Key,surface::keys::EquationOfState>&& std::same_as<std::remove_cvref_t<typenameEOSResource::Target>,typenameBoundary::Formulation::EquationOfState>&& utils::dependencies::SatisfiesKeyList<typename Coefficients::Bindings, typename Boundary::Formulation::StateTerms> [[nodiscard]]automake_pressure_boundary_inputs(std::shared_ptr<constBoundary>boundary,EOSResourceequation_of_state,IsobaricSurfacecondition,constCoefficients&coefficients) { returndetail::pressure_boundary_inputs(std::move(boundary),std::move(equation_of_state),std::move(condition),coefficients,typenameBoundary::Formulation::StateTerms{}); } }