Line data Source code
1 : //* This file is part of the MOOSE framework 2 : //* https://mooseframework.inl.gov 3 : //* 4 : //* All rights reserved, see COPYRIGHT for full restrictions 5 : //* https://github.com/idaholab/moose/blob/master/COPYRIGHT 6 : //* 7 : //* Licensed under LGPL 2.1, please see LICENSE for details 8 : //* https://www.gnu.org/licenses/lgpl-2.1.html 9 : 10 : #pragma once 11 : 12 : #include "VaporMixtureFluidProperties.h" 13 : #include "NaNInterface.h" 14 : 15 : class SinglePhaseFluidProperties; 16 : class IdealGasFluidProperties; 17 : 18 : /** 19 : * Overrides the value methods for a property from some arguments 20 : */ 21 : #define override_property(want, prop1, prop2) \ 22 : template <typename CppType> \ 23 : CppType want##_from_##prop1##_##prop2##_templ( \ 24 : const CppType & prop1, const CppType & prop2, const std::vector<CppType> & x) const; \ 25 : virtual Real want##_from_##prop1##_##prop2(Real prop1, Real prop2, const std::vector<Real> & x) \ 26 : const override; \ 27 : virtual ADReal want##_from_##prop1##_##prop2( \ 28 : const ADReal & prop1, const ADReal & prop2, const std::vector<ADReal> & x) const override 29 : 30 : /** 31 : * Class for fluid properties of an ideal gas mixture 32 : */ 33 : class IdealGasMixtureFluidProperties : public VaporMixtureFluidProperties, public NaNInterface 34 : { 35 : public: 36 : static InputParameters validParams(); 37 : 38 : IdealGasMixtureFluidProperties(const InputParameters & parameters); 39 : 40 : usingVaporMixtureFluidPropertiesMembers; 41 : 42 0 : virtual unsigned int numberOfComponents() const override { return _n_components; } 43 : 44 : virtual const SinglePhaseFluidProperties & getPrimaryFluidProperties() const override; 45 : virtual const SinglePhaseFluidProperties & 46 : getSecondaryFluidProperties(unsigned int i = 0) const override; 47 : 48 : /** 49 : * Computes all mass fractions 50 : * 51 : * @param[in] x_secondary Secondary mass fractions 52 : */ 53 : template <typename CppType> 54 : std::vector<CppType> 55 : secondaryToAllMassFractions_templ(const std::vector<CppType> & x_secondary) const; 56 : std::vector<ADReal> secondaryToAllMassFractions(const std::vector<ADReal> & x_secondary) const; 57 : std::vector<Real> secondaryToAllMassFractions(const std::vector<Real> & x_secondary) const; 58 : 59 : /** 60 : * Computes the mixture specific heat ratio 61 : * 62 : * @param[in] x All mass fractions 63 : */ 64 : template <typename CppType> 65 : CppType mixtureSpecificHeatRatio_templ(const std::vector<CppType> & x) const; 66 : ADReal mixtureSpecificHeatRatio(const std::vector<ADReal> & x) const; 67 : Real mixtureSpecificHeatRatio(const std::vector<Real> & x) const; 68 : 69 : /** 70 : * Computes the mixture molar mass 71 : * 72 : * @param[in] x All mass fractions 73 : */ 74 : template <typename CppType> 75 : CppType mixtureMolarMass_templ(const std::vector<CppType> & x) const; 76 : ADReal mixtureMolarMass(const std::vector<ADReal> & x) const; 77 : Real mixtureMolarMass(const std::vector<Real> & x) const; 78 : 79 : /** 80 : * Computes molar fractions 81 : * 82 : * @param[in] x All mass fractions 83 : */ 84 : template <typename CppType> 85 : std::vector<CppType> molarFractionsFromMassFractions_templ(const std::vector<CppType> & x) const; 86 : std::vector<ADReal> molarFractionsFromMassFractions(const std::vector<ADReal> & x) const; 87 : std::vector<Real> molarFractionsFromMassFractions(const std::vector<Real> & x) const; 88 : 89 : override_property(p, v, e); 90 : override_property(T, v, e); 91 : override_property(v, p, T); 92 : override_property(rho, p, T); 93 : override_property(e, p, T); 94 : override_property(s, p, T); 95 : override_property(c, p, T); 96 : override_property(cp, p, T); 97 : override_property(cv, p, T); 98 : override_property(mu, p, T); 99 : override_property(k, p, T); 100 : override_property(e, p, rho); 101 : 102 : #undef override_property 103 : 104 : protected: 105 : /// Names of component fluid properties 106 : const std::vector<UserObjectName> _component_fp_names; 107 : /// Number of components 108 : const unsigned int _n_components; 109 : /// Number of secondary components 110 : const unsigned int _n_secondary_components; 111 : 112 : /// Component fluid properties objects 113 : std::vector<const IdealGasFluidProperties *> _component_fps; 114 : };