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 "FlowModelSinglePhase.h" 11 : #include "FlowChannelBase.h" 12 : #include "THMNames.h" 13 : 14 : const std::string FlowModelSinglePhase::DENSITY = THM::DENSITY; 15 : const std::string FlowModelSinglePhase::FRICTION_FACTOR_DARCY = THM::FRICTION_FACTOR_DARCY; 16 : const std::string FlowModelSinglePhase::DYNAMIC_VISCOSITY = THM::DYNAMIC_VISCOSITY; 17 : const std::string FlowModelSinglePhase::HEAT_TRANSFER_COEFFICIENT_WALL = 18 : THM::HEAT_TRANSFER_COEFFICIENT_WALL; 19 : const std::string FlowModelSinglePhase::HYDRAULIC_DIAMETER = THM::HYDRAULIC_DIAMETER; 20 : const std::string FlowModelSinglePhase::PRESSURE = THM::PRESSURE; 21 : const std::string FlowModelSinglePhase::RHOA = THM::RHOA; 22 : const std::string FlowModelSinglePhase::RHOEA = THM::RHOEA; 23 : const std::string FlowModelSinglePhase::RHOUA = THM::RHOUA; 24 : const std::string FlowModelSinglePhase::SOUND_SPEED = THM::SOUND_SPEED; 25 : const std::string FlowModelSinglePhase::SPECIFIC_HEAT_CONSTANT_PRESSURE = 26 : THM::SPECIFIC_HEAT_CONSTANT_PRESSURE; 27 : const std::string FlowModelSinglePhase::SPECIFIC_HEAT_CONSTANT_VOLUME = 28 : THM::SPECIFIC_HEAT_CONSTANT_VOLUME; 29 : const std::string FlowModelSinglePhase::SPECIFIC_INTERNAL_ENERGY = THM::SPECIFIC_INTERNAL_ENERGY; 30 : const std::string FlowModelSinglePhase::SPECIFIC_TOTAL_ENTHALPY = THM::SPECIFIC_TOTAL_ENTHALPY; 31 : const std::string FlowModelSinglePhase::SPECIFIC_VOLUME = THM::SPECIFIC_VOLUME; 32 : const std::string FlowModelSinglePhase::TEMPERATURE = THM::TEMPERATURE; 33 : const std::string FlowModelSinglePhase::THERMAL_CONDUCTIVITY = THM::THERMAL_CONDUCTIVITY; 34 : const std::string FlowModelSinglePhase::VELOCITY = THM::VELOCITY; 35 : const std::string FlowModelSinglePhase::VELOCITY_X = THM::VELOCITY_X; 36 : const std::string FlowModelSinglePhase::VELOCITY_Y = THM::VELOCITY_Y; 37 : const std::string FlowModelSinglePhase::VELOCITY_Z = THM::VELOCITY_Z; 38 : const std::string FlowModelSinglePhase::REYNOLDS_NUMBER = THM::REYNOLDS_NUMBER; 39 : 40 : InputParameters 41 8282 : FlowModelSinglePhase::validParams() 42 : { 43 8282 : InputParameters params = FlowModel1PhaseBase::validParams(); 44 : 45 16564 : MooseEnum wave_speed_formulation("einfeldt davis", "einfeldt"); 46 16564 : params.addParam<MooseEnum>( 47 : "wave_speed_formulation", wave_speed_formulation, "Method for computing wave speeds"); 48 : 49 16564 : params.addRequiredParam<std::vector<Real>>( 50 : "scaling_factor_1phase", 51 : "Scaling factors for each single phase variable (rhoA, rhouA, rhoEA)"); 52 : 53 8282 : return params; 54 8282 : } 55 : 56 : registerMooseObject("ThermalHydraulicsApp", FlowModelSinglePhase); 57 : 58 4141 : FlowModelSinglePhase::FlowModelSinglePhase(const InputParameters & params) 59 : : FlowModel1PhaseBase(params), 60 8282 : _scaling_factors(getParam<std::vector<Real>>("scaling_factor_1phase")) 61 : { 62 4141 : } 63 : 64 : Real 65 4029 : FlowModelSinglePhase::getScalingFactorRhoA() const 66 : { 67 4029 : return _scaling_factors[0]; 68 : } 69 : 70 : Real 71 4029 : FlowModelSinglePhase::getScalingFactorRhoUA() const 72 : { 73 4029 : return _scaling_factors[1]; 74 : } 75 : 76 : Real 77 4029 : FlowModelSinglePhase::getScalingFactorRhoEA() const 78 : { 79 4029 : return _scaling_factors[2]; 80 : } 81 : 82 : std::vector<VariableName> 83 8058 : FlowModelSinglePhase::solutionVariableNames() const 84 : { 85 32232 : return {RHOA, RHOUA, RHOEA}; 86 0 : } 87 : 88 : void 89 3967 : FlowModelSinglePhase::addRhoEAIC() 90 : { 91 3967 : const std::string class_name = "RhoEAFromPressureTemperatureFunctionVelocityIC"; 92 3967 : InputParameters params = _factory.getValidParams(class_name); 93 7934 : params.set<VariableName>("variable") = RHOEA; 94 7934 : params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames(); 95 11901 : params.set<std::vector<VariableName>>("p") = {PRESSURE}; 96 11901 : params.set<std::vector<VariableName>>("T") = {TEMPERATURE}; 97 7934 : params.set<FunctionName>("vel") = getVariableFn("initial_vel"); 98 11901 : params.set<std::vector<VariableName>>("A") = {FlowModel::AREA}; 99 3967 : params.set<UserObjectName>("fp") = _fp_name; 100 7934 : _sim.addSimInitialCondition(class_name, genName(_comp_name, "rhoEA_ic"), params); 101 7934 : } 102 : 103 : void 104 3967 : FlowModelSinglePhase::addDensityIC() 105 : { 106 3967 : const std::string class_name = "RhoFromPressureTemperatureIC"; 107 3967 : InputParameters params = _factory.getValidParams(class_name); 108 7934 : params.set<VariableName>("variable") = DENSITY; 109 7934 : params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames(); 110 11901 : params.set<std::vector<VariableName>>("p") = {PRESSURE}; 111 11901 : params.set<std::vector<VariableName>>("T") = {TEMPERATURE}; 112 3967 : params.set<UserObjectName>("fp") = _fp_name; 113 7934 : _sim.addSimInitialCondition(class_name, genName(_comp_name, "rho_ic"), params); 114 7934 : } 115 : 116 : void 117 4029 : FlowModelSinglePhase::addPressureAux() 118 : { 119 4029 : const std::string class_name = "PressureAux"; 120 4029 : InputParameters params = _factory.getValidParams(class_name); 121 8058 : params.set<AuxVariableName>("variable") = PRESSURE; 122 8058 : params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames(); 123 12087 : params.set<std::vector<VariableName>>("e") = {SPECIFIC_INTERNAL_ENERGY}; 124 12087 : params.set<std::vector<VariableName>>("v") = {SPECIFIC_VOLUME}; 125 4029 : params.set<UserObjectName>("fp") = _fp_name; 126 8058 : _sim.addAuxKernel(class_name, genName(_comp_name, "pressure_uv_auxkernel"), params); 127 8058 : } 128 : 129 : void 130 4029 : FlowModelSinglePhase::addTemperatureAux() 131 : { 132 4029 : const std::string class_name = "TemperatureAux"; 133 4029 : InputParameters params = _factory.getValidParams(class_name); 134 8058 : params.set<AuxVariableName>("variable") = TEMPERATURE; 135 8058 : params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames(); 136 12087 : params.set<std::vector<VariableName>>("e") = {SPECIFIC_INTERNAL_ENERGY}; 137 12087 : params.set<std::vector<VariableName>>("v") = {SPECIFIC_VOLUME}; 138 4029 : params.set<UserObjectName>("fp") = _fp_name; 139 8058 : _sim.addAuxKernel(class_name, genName(_comp_name, "T_auxkernel"), params); 140 8058 : } 141 : 142 : void 143 4029 : FlowModelSinglePhase::addFluidPropertiesMaterials() 144 : { 145 : { 146 4029 : const std::string class_name = "ADFluidProperties3EqnMaterial"; 147 4029 : InputParameters params = _factory.getValidParams(class_name); 148 4029 : params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames(); 149 8058 : params.set<UserObjectName>("fp") = _fp_name; 150 12087 : params.set<std::vector<VariableName>>("rhoA") = {RHOA}; 151 12087 : params.set<std::vector<VariableName>>("rhouA") = {RHOUA}; 152 12087 : params.set<std::vector<VariableName>>("rhoEA") = {RHOEA}; 153 12087 : params.set<std::vector<VariableName>>("A") = {FlowModel::AREA}; 154 8058 : _sim.addMaterial(class_name, genName(_comp_name, "fp_mat"), params); 155 4029 : } 156 : { 157 4029 : const std::string class_name = "ADDynamicViscosityMaterial"; 158 4029 : InputParameters params = _factory.getValidParams(class_name); 159 4029 : params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames(); 160 8058 : params.set<UserObjectName>("fp_1phase") = _fp_name; 161 8058 : params.set<MaterialPropertyName>("mu") = {DYNAMIC_VISCOSITY}; 162 8058 : params.set<MaterialPropertyName>("v") = {SPECIFIC_VOLUME}; 163 8058 : params.set<MaterialPropertyName>("e") = {SPECIFIC_INTERNAL_ENERGY}; 164 8058 : _sim.addMaterial(class_name, genName(_comp_name, "mu_mat"), params); 165 4029 : } 166 4029 : } 167 : 168 : void 169 4029 : FlowModelSinglePhase::addNumericalFluxUserObject() 170 : { 171 4029 : const std::string class_name = "ADNumericalFlux3EqnHLLC"; 172 4029 : InputParameters params = _factory.getValidParams(class_name); 173 8058 : params.applySpecificParameters(parameters(), {"wave_speed_formulation"}); 174 4029 : params.set<UserObjectName>("fluid_properties") = _fp_name; 175 8058 : params.set<MooseEnum>("emit_on_nan") = "none"; 176 20145 : params.set<ExecFlagEnum>("execute_on") = {EXEC_INITIAL, EXEC_LINEAR, EXEC_NONLINEAR}; 177 4029 : _sim.addUserObject(class_name, _numerical_flux_name, params); 178 20145 : } 179 : 180 : void 181 4029 : FlowModelSinglePhase::addSlopeReconstructionMaterial() 182 : { 183 4029 : const std::string class_name = "ADRDG3EqnMaterial"; 184 4029 : InputParameters params = _factory.getValidParams(class_name); 185 4029 : params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames(); 186 8058 : params.set<MooseEnum>("scheme") = _rdg_slope_reconstruction; 187 12087 : params.set<std::vector<VariableName>>("A_elem") = {AREA}; 188 12087 : params.set<std::vector<VariableName>>("A_linear") = {AREA_LINEAR}; 189 12087 : params.set<std::vector<VariableName>>("rhoA") = {RHOA}; 190 12087 : params.set<std::vector<VariableName>>("rhouA") = {RHOUA}; 191 12087 : params.set<std::vector<VariableName>>("rhoEA") = {RHOEA}; 192 8058 : params.set<MaterialPropertyName>("direction") = DIRECTION; 193 4029 : params.set<UserObjectName>("fluid_properties") = _fp_name; 194 4029 : params.set<bool>("implicit") = _sim.getImplicitTimeIntegrationFlag(); 195 8058 : _sim.addMaterial(class_name, genName(_comp_name, "rdg_3egn_mat"), params); 196 8058 : } 197 : 198 : void 199 4029 : FlowModelSinglePhase::addRDGAdvectionDGKernels() 200 : { 201 : // mass 202 4029 : const std::string class_name = "ADNumericalFlux3EqnDGKernel"; 203 4029 : InputParameters params = _factory.getValidParams(class_name); 204 8058 : params.set<NonlinearVariableName>("variable") = RHOA; 205 8058 : params.set<std::vector<SubdomainName>>("block") = _flow_channel.getSubdomainNames(); 206 12087 : params.set<std::vector<VariableName>>("A_linear") = {AREA_LINEAR}; 207 12087 : params.set<std::vector<VariableName>>("rhoA") = {RHOA}; 208 12087 : params.set<std::vector<VariableName>>("rhouA") = {RHOUA}; 209 12087 : params.set<std::vector<VariableName>>("rhoEA") = {RHOEA}; 210 4029 : params.set<UserObjectName>("numerical_flux") = _numerical_flux_name; 211 4029 : params.set<bool>("implicit") = _sim.getImplicitTimeIntegrationFlag(); 212 8058 : _sim.addDGKernel(class_name, genName(_comp_name, "mass_advection"), params); 213 : 214 : // momentum 215 8058 : params.set<NonlinearVariableName>("variable") = RHOUA; 216 8058 : _sim.addDGKernel(class_name, genName(_comp_name, "momentum_advection"), params); 217 : 218 : // energy 219 8058 : params.set<NonlinearVariableName>("variable") = RHOEA; 220 8058 : _sim.addDGKernel(class_name, genName(_comp_name, "energy_advection"), params); 221 8058 : }