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 "InputParameters.h" 13 : #include "InitialCondition.h" 14 : #include "VaporMixtureFluidProperties.h" 15 : 16 : template <typename T = InitialCondition> 17 : class VaporMixtureInterface; 18 : 19 : /** 20 : * Interface for calculations involving vapor mixtures 21 : */ 22 : template <class T> 23 : class VaporMixtureInterface : public T 24 : { 25 : public: 26 : VaporMixtureInterface(const InputParameters & parameters); 27 : 28 : protected: 29 : /** 30 : * Gets the vector of mass fractions of each secondary vapor, at a quadrature point 31 : */ 32 : std::vector<Real> getMassFractionVector() const; 33 : 34 : /// Vapor mixture fluid properties 35 : const VaporMixtureFluidProperties & _fp_vapor_mixture; 36 : /// Number of secondary vapors 37 : const unsigned int _n_secondary_vapors; 38 : /// Mass fractions of secondary vapors 39 : const std::vector<const VariableValue *> _x_secondary_vapors; 40 : 41 : public: 42 : static InputParameters validParams(); 43 : }; 44 : 45 : template <class T> 46 : InputParameters 47 41 : VaporMixtureInterface<T>::validParams() 48 : { 49 41 : InputParameters params = emptyInputParameters(); 50 : 51 82 : params.addRequiredCoupledVar("x_secondary_vapors", "Mass fractions of secondary vapors"); 52 82 : params.addRequiredParam<UserObjectName>("fp_vapor_mixture", 53 : "Vapor mixture fluid properties user object name"); 54 : 55 41 : return params; 56 0 : } 57 : 58 : template <class T> 59 22 : VaporMixtureInterface<T>::VaporMixtureInterface(const InputParameters & parameters) 60 : : T(parameters), 61 22 : _fp_vapor_mixture(T::template getUserObject<VaporMixtureFluidProperties>("fp_vapor_mixture")), 62 22 : _n_secondary_vapors(T::coupledComponents("x_secondary_vapors")), 63 44 : _x_secondary_vapors(T::coupledValues("x_secondary_vapors")) 64 : { 65 22 : } 66 : 67 : template <class T> 68 : std::vector<Real> 69 18 : VaporMixtureInterface<T>::getMassFractionVector() const 70 : { 71 18 : std::vector<Real> x_secondary_vapors(_n_secondary_vapors); 72 54 : for (unsigned int i = 0; i < _n_secondary_vapors; ++i) 73 36 : x_secondary_vapors[i] = (*_x_secondary_vapors[i])[T::_qp]; 74 18 : return x_secondary_vapors; 75 : }