pressure_surface.hpp string_view serif/equations/contributions.hpp serif/geometry/surface/detail/evaluation.hpp serif/utils/error/errors.hpp src/compile_time_checks/serif/operators/plan.cpp src/compile_time_checks/serif/operators/serial_backend.cpp src/include/serif/equations/equations.hpp serif::equations::PressureSurfaceConstraint serif serif::equations #pragmaonce #include<string_view> #include"serif/equations/contributions.hpp" #include"serif/geometry/surface/detail/evaluation.hpp" #include"serif/utils/error/errors.hpp" namespaceserif::equations { template<eos::models::EOSModelEOST> requireseos::models::EOSSupportingRelation<EOST,eos::relations::SpecificEnthalpyFromPressure> classPressureSurfaceConstraintfinal:publicContribution<discretization::forms::Operand<discretization::blocks::enthalpy::specific>,discretization::domain::StellarSurfaceBoundary> { public: usingEnthalpy=discretization::blocks::enthalpy::specific; usingFormulation=geometry::surface::PressureSurfaceFormulation<EOST, utils::dependencies::Bindings<utils::dependencies::Binding<dimensions::SpecificEnthalpy, Enthalpy>>>; usingOperands=typenameFormulation::Operands; usingResidualQuantity=typenameFormulation::ResidualQuantity; staticconstexprstd::string_viewname="pressuresurfaceconstraint"; staticconstexprboolposition_independent=true; PressureSurfaceConstraint(constEOST&equation_of_state,dimensions::PressureValuetarget_pressure):m_condition(target_pressure) { usingnamespaceutils::errors; constautoresponse=geometry::surface::detail::evaluate_surface_response<Formulation>(equation_of_state,target_pressure,{}); serif_ensure<SERiFErrorCode::NON_FINITE_VALUE_ERROR,std::domain_error>(response.has_value(),"TheEOSreturnedanon-finitesurfaceresponse;checkitsthermodynamicdomain."); m_response=*response; } [[nodiscard]]PointLinearization<Operands>evaluate(constEquationPoint<Operands>&point)const { returngeometry::surface::detail::linearize_surface<Formulation>(m_condition.target_pressure(),point,m_response); } [[nodiscard]]dimensions::PressureValuetarget_pressure()constnoexcept { returnm_condition.target_pressure(); } private: geometry::surface::Isobaricm_condition; geometry::surface::SurfaceEOSResponse<Formulation>m_response; }; }//namespaceserif::equations