LCOV - code coverage report
Current view: top level - src/base - FlowModelGasMix.C (source / functions) Hit Total Coverage
Test: idaholab/moose thermal_hydraulics: #32971 (54bef8) with base c6cf66 Lines: 203 205 99.0 %
Date: 2026-05-29 20:41:18 Functions: 23 23 100.0 %
Legend: Lines: hit not hit

          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             : #include "FlowModelGasMix.h"
      11             : #include "FlowChannelBase.h"
      12             : #include "THMNames.h"
      13             : 
      14             : registerMooseObject("ThermalHydraulicsApp", FlowModelGasMix);
      15             : 
      16             : InputParameters
      17          18 : FlowModelGasMix::validParams()
      18             : {
      19          18 :   InputParameters params = FlowModel1PhaseBase::validParams();
      20             : 
      21          36 :   params.addRequiredParam<Real>("scaling_factor_xirhoA",
      22             :                                 "Scaling factor for the secondary component mass equation");
      23          36 :   params.addRequiredParam<Real>("scaling_factor_rhoA",
      24             :                                 "Scaling factor for the mixture mass equation");
      25          36 :   params.addRequiredParam<Real>("scaling_factor_rhouA", "Scaling factor for the momentum equation");
      26          36 :   params.addRequiredParam<Real>("scaling_factor_rhoEA", "Scaling factor for the energy equation");
      27             : 
      28          18 :   return params;
      29           0 : }
      30             : 
      31           9 : FlowModelGasMix::FlowModelGasMix(const InputParameters & params) : FlowModel1PhaseBase(params) {}
      32             : 
      33             : void
      34           9 : FlowModelGasMix::addVariables()
      35             : {
      36           9 :   FlowModel1PhaseBase::addVariables();
      37             : 
      38           9 :   const std::vector<SubdomainName> & subdomains = _flow_channel.getSubdomainNames();
      39             : 
      40          18 :   _sim.addSimVariable(
      41          18 :       true, THM::XIRHOA, _fe_type, subdomains, getParam<Real>("scaling_factor_xirhoA"));
      42           9 :   _sim.addSimVariable(false, THM::MASS_FRACTION, _fe_type, subdomains);
      43           9 : }
      44             : 
      45             : Real
      46           9 : FlowModelGasMix::getScalingFactorRhoA() const
      47             : {
      48          18 :   return getParam<Real>("scaling_factor_rhoA");
      49             : }
      50             : 
      51             : Real
      52           9 : FlowModelGasMix::getScalingFactorRhoUA() const
      53             : {
      54          18 :   return getParam<Real>("scaling_factor_rhouA");
      55             : }
      56             : 
      57             : Real
      58           9 : FlowModelGasMix::getScalingFactorRhoEA() const
      59             : {
      60          18 :   return getParam<Real>("scaling_factor_rhoEA");
      61             : }
      62             : 
      63             : std::vector<VariableName>
      64          18 : FlowModelGasMix::solutionVariableNames() const
      65             : {
      66          90 :   return {THM::XIRHOA, THM::RHOA, THM::RHOUA, THM::RHOEA};
      67           0 : }
      68             : 
      69             : void
      70           9 : FlowModelGasMix::addInitialConditions()
      71             : {
      72           9 :   FlowModel1PhaseBase::addInitialConditions();
      73             : 
      74           9 :   if (ICParametersAreValid())
      75             :   {
      76           9 :     addXiRhoAIC();
      77          18 :     addFunctionIC(THM::MASS_FRACTION,
      78           9 :                   _flow_channel.getParam<FunctionName>("initial_mass_fraction"));
      79             :   }
      80           9 : }
      81             : 
      82             : void
      83           9 : FlowModelGasMix::addXiRhoAIC()
      84             : {
      85           9 :   const std::string class_name = "VariableProductIC";
      86           9 :   InputParameters params = _factory.getValidParams(class_name);
      87          18 :   params.set<VariableName>("variable") = THM::XIRHOA;
      88          18 :   params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
      89          36 :   params.set<std::vector<VariableName>>("values") = {THM::MASS_FRACTION, THM::RHOA};
      90          18 :   _sim.addSimInitialCondition(class_name, genName(_comp_name, "xirhoA_ic"), params);
      91          18 : }
      92             : 
      93             : void
      94           9 : FlowModelGasMix::addRhoEAIC()
      95             : {
      96           9 :   const std::string class_name = "FlowModelGasMixIC";
      97           9 :   InputParameters params = _factory.getValidParams(class_name);
      98          18 :   params.set<VariableName>("variable") = THM::RHOEA;
      99           9 :   params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
     100          18 :   params.set<MooseEnum>("quantity") = "rhoEA";
     101          18 :   params.set<FunctionName>("mass_fraction") =
     102           9 :       _flow_channel.getParam<FunctionName>("initial_mass_fraction");
     103          27 :   params.set<FunctionName>("pressure") = _flow_channel.getParam<FunctionName>("initial_p");
     104          27 :   params.set<FunctionName>("temperature") = _flow_channel.getParam<FunctionName>("initial_T");
     105          27 :   params.set<FunctionName>("velocity") = _flow_channel.getParam<FunctionName>("initial_vel");
     106          27 :   params.set<std::vector<VariableName>>("area") = {THM::AREA};
     107           9 :   params.set<UserObjectName>("fluid_properties") = _fp_name;
     108          18 :   _sim.addSimInitialCondition(class_name, genName(_comp_name, "rhoEA_ic"), params);
     109          18 : }
     110             : 
     111             : void
     112           9 : FlowModelGasMix::addDensityIC()
     113             : {
     114           9 :   const std::string class_name = "FlowModelGasMixIC";
     115           9 :   InputParameters params = _factory.getValidParams(class_name);
     116          18 :   params.set<VariableName>("variable") = THM::DENSITY;
     117           9 :   params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
     118          18 :   params.set<MooseEnum>("quantity") = "rho";
     119          18 :   params.set<FunctionName>("mass_fraction") =
     120           9 :       _flow_channel.getParam<FunctionName>("initial_mass_fraction");
     121          27 :   params.set<FunctionName>("pressure") = _flow_channel.getParam<FunctionName>("initial_p");
     122          27 :   params.set<FunctionName>("temperature") = _flow_channel.getParam<FunctionName>("initial_T");
     123          27 :   params.set<FunctionName>("velocity") = _flow_channel.getParam<FunctionName>("initial_vel");
     124          27 :   params.set<std::vector<VariableName>>("area") = {THM::AREA};
     125           9 :   params.set<UserObjectName>("fluid_properties") = _fp_name;
     126          18 :   _sim.addSimInitialCondition(class_name, genName(_comp_name, "rho_ic"), params);
     127          18 : }
     128             : 
     129             : void
     130           9 : FlowModelGasMix::addKernels()
     131             : {
     132           9 :   FlowModel1PhaseBase::addKernels();
     133             : 
     134           9 :   addTimeDerivativeKernelIfTransient(THM::XIRHOA);
     135           9 : }
     136             : 
     137             : void
     138           9 : FlowModelGasMix::addDGKernels()
     139             : {
     140           9 :   FlowModel1PhaseBase::addDGKernels();
     141             : 
     142           9 :   addMassDiffusionSpeciesDGKernel();
     143           9 :   addMassDiffusionEnergyDGKernel();
     144           9 : }
     145             : 
     146             : void
     147           9 : FlowModelGasMix::addMassDiffusionSpeciesDGKernel()
     148             : {
     149           9 :   const std::string class_name = "MassDiffusionSpeciesGasMixDGKernel";
     150           9 :   InputParameters params = _factory.getValidParams(class_name);
     151          18 :   params.set<NonlinearVariableName>("variable") = THM::XIRHOA;
     152          18 :   params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
     153          27 :   params.set<std::vector<VariableName>>("A_linear") = {THM::AREA_LINEAR};
     154          18 :   params.set<MaterialPropertyName>("density") = THM::DENSITY;
     155          18 :   params.set<MaterialPropertyName>("diffusion_coefficient") = THM::MASS_DIFFUSION_COEFFICIENT;
     156          18 :   params.set<MaterialPropertyName>("mass_fraction") = THM::MASS_FRACTION;
     157          18 :   params.set<MaterialPropertyName>("direction") = THM::DIRECTION;
     158           9 :   params.set<bool>("implicit") = _sim.getImplicitTimeIntegrationFlag();
     159          18 :   _sim.addDGKernel(class_name, genName(_comp_name, "mass_diffusion_species"), params);
     160          18 : }
     161             : 
     162             : void
     163           9 : FlowModelGasMix::addMassDiffusionEnergyDGKernel()
     164             : {
     165           9 :   const std::string class_name = "MassDiffusionEnergyGasMixDGKernel";
     166           9 :   InputParameters params = _factory.getValidParams(class_name);
     167          18 :   params.set<NonlinearVariableName>("variable") = THM::RHOEA;
     168          18 :   params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
     169          27 :   params.set<std::vector<VariableName>>("A_linear") = {THM::AREA_LINEAR};
     170          18 :   params.set<MaterialPropertyName>("density") = THM::DENSITY;
     171          18 :   params.set<MaterialPropertyName>("pressure") = THM::PRESSURE;
     172          18 :   params.set<MaterialPropertyName>("temperature") = THM::TEMPERATURE;
     173          18 :   params.set<MaterialPropertyName>("velocity") = THM::VELOCITY;
     174          18 :   params.set<MaterialPropertyName>("diffusion_coefficient") = THM::MASS_DIFFUSION_COEFFICIENT;
     175          18 :   params.set<MaterialPropertyName>("mass_fraction") = THM::MASS_FRACTION;
     176          18 :   params.set<MaterialPropertyName>("direction") = THM::DIRECTION;
     177           9 :   params.set<UserObjectName>("fluid_properties") = _fp_name;
     178           9 :   params.set<bool>("implicit") = _sim.getImplicitTimeIntegrationFlag();
     179          18 :   _sim.addDGKernel(class_name, genName(_comp_name, "mass_diffusion_energy"), params);
     180          18 : }
     181             : 
     182             : void
     183           9 : FlowModelGasMix::addAuxKernels()
     184             : {
     185           9 :   FlowModel1PhaseBase::addAuxKernels();
     186           9 :   addMassFractionAux();
     187           9 : }
     188             : 
     189             : void
     190           9 : FlowModelGasMix::addPressureAux()
     191             : {
     192           9 :   const std::string class_name = "FlowModelGasMixAux";
     193           9 :   InputParameters params = _factory.getValidParams(class_name);
     194          18 :   params.set<AuxVariableName>("variable") = THM::PRESSURE;
     195           9 :   params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
     196          18 :   params.set<MooseEnum>("quantity") = "p";
     197          27 :   params.set<std::vector<VariableName>>("xirhoA") = {THM::XIRHOA};
     198          27 :   params.set<std::vector<VariableName>>("rhoA") = {THM::RHOA};
     199          27 :   params.set<std::vector<VariableName>>("rhouA") = {THM::RHOUA};
     200          27 :   params.set<std::vector<VariableName>>("rhoEA") = {THM::RHOEA};
     201          27 :   params.set<std::vector<VariableName>>("area") = {THM::AREA};
     202           9 :   params.set<UserObjectName>("fluid_properties") = _fp_name;
     203          36 :   params.set<ExecFlagEnum>("execute_on") = {EXEC_INITIAL, EXEC_TIMESTEP_END};
     204          18 :   _sim.addAuxKernel(class_name, genName(_comp_name, "p_aux"), params);
     205          27 : }
     206             : 
     207             : void
     208           9 : FlowModelGasMix::addTemperatureAux()
     209             : {
     210           9 :   const std::string class_name = "FlowModelGasMixAux";
     211           9 :   InputParameters params = _factory.getValidParams(class_name);
     212          18 :   params.set<AuxVariableName>("variable") = THM::TEMPERATURE;
     213           9 :   params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
     214          18 :   params.set<MooseEnum>("quantity") = "T";
     215          27 :   params.set<std::vector<VariableName>>("xirhoA") = {THM::XIRHOA};
     216          27 :   params.set<std::vector<VariableName>>("rhoA") = {THM::RHOA};
     217          27 :   params.set<std::vector<VariableName>>("rhouA") = {THM::RHOUA};
     218          27 :   params.set<std::vector<VariableName>>("rhoEA") = {THM::RHOEA};
     219          27 :   params.set<std::vector<VariableName>>("area") = {THM::AREA};
     220           9 :   params.set<UserObjectName>("fluid_properties") = _fp_name;
     221          36 :   params.set<ExecFlagEnum>("execute_on") = {EXEC_INITIAL, EXEC_TIMESTEP_END};
     222          18 :   _sim.addAuxKernel(class_name, genName(_comp_name, "T_aux"), params);
     223          27 : }
     224             : 
     225             : void
     226           9 : FlowModelGasMix::addMassFractionAux()
     227             : {
     228           9 :   const std::string class_name = "QuotientAux";
     229           9 :   InputParameters params = _factory.getValidParams(class_name);
     230          18 :   params.set<AuxVariableName>("variable") = THM::MASS_FRACTION;
     231          18 :   params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
     232          27 :   params.set<std::vector<VariableName>>("numerator") = {THM::XIRHOA};
     233          27 :   params.set<std::vector<VariableName>>("denominator") = {THM::RHOA};
     234          36 :   params.set<ExecFlagEnum>("execute_on") = {EXEC_INITIAL, EXEC_TIMESTEP_END};
     235          18 :   _sim.addAuxKernel(class_name, genName(_comp_name, "xi_aux"), params);
     236          27 : }
     237             : 
     238             : void
     239           9 : FlowModelGasMix::addFluidPropertiesMaterials()
     240             : {
     241           9 :   const std::string class_name = "FluidPropertiesGasMixMaterial";
     242           9 :   InputParameters params = _factory.getValidParams(class_name);
     243          18 :   params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
     244          27 :   params.set<std::vector<VariableName>>("xirhoA") = {THM::XIRHOA};
     245          27 :   params.set<std::vector<VariableName>>("rhoA") = {THM::RHOA};
     246          27 :   params.set<std::vector<VariableName>>("rhouA") = {THM::RHOUA};
     247          27 :   params.set<std::vector<VariableName>>("rhoEA") = {THM::RHOEA};
     248          27 :   params.set<std::vector<VariableName>>("area") = {THM::AREA};
     249           9 :   params.set<UserObjectName>("fluid_properties") = _fp_name;
     250          18 :   _sim.addMaterial(class_name, genName(_comp_name, "fp_mat"), params);
     251          18 : }
     252             : 
     253             : void
     254           9 : FlowModelGasMix::addNumericalFluxUserObject()
     255             : {
     256           9 :   const std::string class_name = "NumericalFluxGasMixHLLC";
     257           9 :   InputParameters params = _factory.getValidParams(class_name);
     258           9 :   params.set<UserObjectName>("fluid_properties") = _fp_name;
     259          18 :   params.set<MooseEnum>("emit_on_nan") = "none";
     260          45 :   params.set<ExecFlagEnum>("execute_on") = {EXEC_INITIAL, EXEC_LINEAR, EXEC_NONLINEAR};
     261           9 :   _sim.addUserObject(class_name, _numerical_flux_name, params);
     262          27 : }
     263             : 
     264             : void
     265           9 : FlowModelGasMix::addSlopeReconstructionMaterial()
     266             : {
     267           9 :   const std::string class_name = "SlopeReconstructionGasMixMaterial";
     268           9 :   InputParameters params = _factory.getValidParams(class_name);
     269           9 :   params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
     270          18 :   params.set<MooseEnum>("scheme") = _rdg_slope_reconstruction;
     271          27 :   params.set<std::vector<VariableName>>("A_elem") = {THM::AREA};
     272          27 :   params.set<std::vector<VariableName>>("A_linear") = {THM::AREA_LINEAR};
     273          27 :   params.set<std::vector<VariableName>>("xirhoA") = {THM::XIRHOA};
     274          27 :   params.set<std::vector<VariableName>>("rhoA") = {THM::RHOA};
     275          27 :   params.set<std::vector<VariableName>>("rhouA") = {THM::RHOUA};
     276          27 :   params.set<std::vector<VariableName>>("rhoEA") = {THM::RHOEA};
     277           9 :   params.set<UserObjectName>("fluid_properties") = _fp_name;
     278           9 :   params.set<bool>("implicit") = _sim.getImplicitTimeIntegrationFlag();
     279          18 :   _sim.addMaterial(class_name, genName(_comp_name, "slope_mat"), params);
     280          18 : }
     281             : 
     282             : void
     283           9 : FlowModelGasMix::addRDGAdvectionDGKernels()
     284             : {
     285          45 :   const std::vector<NonlinearVariableName> vars{THM::XIRHOA, THM::RHOA, THM::RHOUA, THM::RHOEA};
     286             : 
     287          45 :   for (const auto & var : vars)
     288             :   {
     289          36 :     const std::string class_name = "NumericalFluxGasMixDGKernel";
     290          36 :     InputParameters params = _factory.getValidParams(class_name);
     291          36 :     params.set<NonlinearVariableName>("variable") = var;
     292          72 :     params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames();
     293         108 :     params.set<std::vector<VariableName>>("A_linear") = {THM::AREA_LINEAR};
     294         108 :     params.set<std::vector<VariableName>>("xirhoA") = {THM::XIRHOA};
     295         108 :     params.set<std::vector<VariableName>>("rhoA") = {THM::RHOA};
     296         108 :     params.set<std::vector<VariableName>>("rhouA") = {THM::RHOUA};
     297         108 :     params.set<std::vector<VariableName>>("rhoEA") = {THM::RHOEA};
     298          36 :     params.set<UserObjectName>("numerical_flux") = _numerical_flux_name;
     299          36 :     params.set<bool>("implicit") = _sim.getImplicitTimeIntegrationFlag();
     300          72 :     _sim.addDGKernel(class_name, genName(_comp_name, "advection:" + var), params);
     301          36 :   }
     302           9 : }

Generated by: LCOV version 1.14