module; #include #include export module mean_field:eos.quantities; export import :dimensions.quantities; export namespace mean_field::eos { // Compatibility names for the thermodynamic subset now owned by the // general dimensions partition. using ThermodynamicQuantity = dimensions::ThermodynamicQuantity; template concept ThermodynamicQuantityType = dimensions::ThermodynamicQuantityType; namespace quantity { using Density = dimensions::quantity::Density; using Pressure = dimensions::quantity::Pressure; using SpecificEnthalpy = dimensions::quantity::SpecificEnthalpy; } // namespace quantity template concept Numeric = dimensions::Numeric; template using QuantityValue = dimensions::QuantityValue; using DensityValue = dimensions::DensityValue; using PressureValue = dimensions::PressureValue; using SpecificEnthalpyValue = dimensions::SpecificEnthalpyValue; template using IsQuantityValue = dimensions::IsQuantityValue; template concept QuantityValueType = dimensions::QuantityValueType && ThermodynamicQuantityType>; template using QuantityOf = dimensions::QuantityOf; template using QuantityOfT = dimensions::QuantityOfT; template class PartialDerivative final { public: explicit constexpr PartialDerivative(const double value) noexcept : m_value(value) { } [[nodiscard]] constexpr double value() const noexcept { return m_value; } friend constexpr PartialDerivative< OutputQuantity, InputQuantity> operator+( const PartialDerivative< OutputQuantity, InputQuantity> &lhs, const PartialDerivative< OutputQuantity, InputQuantity> &rhs ) noexcept; friend constexpr PartialDerivative< OutputQuantity, InputQuantity> operator-( const PartialDerivative< OutputQuantity, InputQuantity> &lhs, const PartialDerivative< OutputQuantity, InputQuantity> &rhs ) noexcept; template friend constexpr PartialDerivative< OutputQuantity, InputQuantity> operator*( const PartialDerivative< OutputQuantity, InputQuantity> &, Scalar ) noexcept; template friend constexpr PartialDerivative< OutputQuantity, InputQuantity> operator*( Scalar, const PartialDerivative< OutputQuantity, InputQuantity> & ) noexcept; template friend constexpr PartialDerivative< OutputQuantity, InputQuantity> operator/( const PartialDerivative< OutputQuantity, InputQuantity> &, Scalar ) noexcept; template friend constexpr std::partial_ordering operator<=>( const PartialDerivative< OutputQuantity, InputQuantity> &lhs, Scalar rhs ) noexcept { return lhs.m_value <=> static_cast(rhs); } template friend constexpr std::partial_ordering operator<=>( Scalar lhs, const PartialDerivative< OutputQuantity, InputQuantity> &rhs ) noexcept { return static_cast(lhs) <=> rhs.m_value; } friend constexpr std::partial_ordering operator<=>( const PartialDerivative< OutputQuantity, InputQuantity> &lhs, const PartialDerivative< OutputQuantity, InputQuantity> &rhs ) noexcept { return lhs.m_value <=> rhs.m_value; } private: double m_value; }; template struct WithRespectTo final { }; } // namespace mean_field::eos