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 : // Navier-Stokes includes 11 : #include "PorousConservedVarMaterial.h" 12 : #include "NS.h" 13 : #include "NavierStokesMethods.h" 14 : 15 : // FluidProperties includes 16 : #include "SinglePhaseFluidProperties.h" 17 : 18 : registerMooseObject("NavierStokesApp", PorousConservedVarMaterial); 19 : 20 : InputParameters 21 275 : PorousConservedVarMaterial::validParams() 22 : { 23 275 : auto params = Material::validParams(); 24 275 : params.addRequiredParam<UserObjectName>(NS::fluid, "Fluid properties userobject"); 25 275 : params.addRequiredCoupledVar(NS::density, "density"); 26 275 : params.addRequiredCoupledVar(NS::total_energy_density, "total fluid energy"); 27 275 : params.addRequiredCoupledVar(NS::superficial_momentum_x, "The x-momentum times the porosity"); 28 275 : params.addCoupledVar(NS::superficial_momentum_y, "The y-momentum times the porosity"); 29 275 : params.addCoupledVar(NS::superficial_momentum_z, "The z-momentum times the porosity"); 30 275 : params.addClassDescription("Provides access to variables for a conserved variable set " 31 : "of density, total fluid energy, and momentum"); 32 275 : params.addRequiredParam<MaterialPropertyName>(NS::porosity, "the porosity"); 33 275 : return params; 34 0 : } 35 : 36 207 : PorousConservedVarMaterial::PorousConservedVarMaterial(const InputParameters & params) 37 : : Material(params), 38 414 : _fluid(UserObjectInterface::getUserObject<SinglePhaseFluidProperties>(NS::fluid)), 39 207 : _var_rho(adCoupledValue(NS::density)), 40 207 : _var_grad_rho(adCoupledGradient(NS::density)), 41 207 : _var_rho_ud(adCoupledValue(NS::superficial_momentum_x)), 42 207 : _var_rho_vd(isCoupled(NS::superficial_momentum_y) ? adCoupledValue(NS::superficial_momentum_y) 43 : : _ad_zero), 44 207 : _var_rho_wd(isCoupled(NS::superficial_momentum_z) ? adCoupledValue(NS::superficial_momentum_z) 45 : : _ad_zero), 46 207 : _var_grad_rho_ud(adCoupledGradient(NS::superficial_momentum_x)), 47 207 : _var_grad_rho_vd(isCoupled(NS::superficial_momentum_y) 48 207 : ? adCoupledGradient(NS::superficial_momentum_y) 49 : : _ad_grad_zero), 50 207 : _var_grad_rho_wd(isCoupled(NS::superficial_momentum_z) 51 207 : ? adCoupledGradient(NS::superficial_momentum_z) 52 : : _ad_grad_zero), 53 207 : _var_total_energy_density(adCoupledValue(NS::total_energy_density)), 54 207 : _var_grad_rho_et(adCoupledGradient(NS::total_energy_density)), 55 207 : _epsilon(getMaterialProperty<Real>(NS::porosity)), 56 207 : _rho(declareADProperty<Real>(NS::density)), 57 207 : _superficial_rho(declareADProperty<Real>(NS::superficial_density)), 58 207 : _mass_flux(declareADProperty<RealVectorValue>(NS::mass_flux)), 59 207 : _momentum(declareADProperty<RealVectorValue>(NS::momentum)), 60 207 : _total_energy_density(declareADProperty<Real>(NS::total_energy_density)), 61 207 : _velocity(declareADProperty<RealVectorValue>(NS::velocity)), 62 207 : _speed(declareADProperty<Real>(NS::speed)), 63 207 : _superficial_velocity(declareADProperty<RealVectorValue>(NS::superficial_velocity)), 64 207 : _sup_vel_x(declareADProperty<Real>(NS::superficial_velocity_x)), 65 207 : _sup_vel_y(declareADProperty<Real>(NS::superficial_velocity_y)), 66 207 : _sup_vel_z(declareADProperty<Real>(NS::superficial_velocity_z)), 67 207 : _grad_sup_vel_x(declareADProperty<RealVectorValue>(NS::grad(NS::superficial_velocity_x))), 68 207 : _grad_sup_vel_y(declareADProperty<RealVectorValue>(NS::grad(NS::superficial_velocity_y))), 69 207 : _grad_sup_vel_z(declareADProperty<RealVectorValue>(NS::grad(NS::superficial_velocity_z))), 70 207 : _sup_mom_x(declareADProperty<Real>(NS::superficial_momentum_x)), 71 207 : _sup_mom_y(declareADProperty<Real>(NS::superficial_momentum_y)), 72 207 : _sup_mom_z(declareADProperty<Real>(NS::superficial_momentum_z)), 73 207 : _vel_x(declareADProperty<Real>(NS::velocity_x)), 74 207 : _vel_y(declareADProperty<Real>(NS::velocity_y)), 75 207 : _vel_z(declareADProperty<Real>(NS::velocity_z)), 76 207 : _rhou(declareADProperty<Real>(NS::momentum_x)), 77 207 : _rhov(declareADProperty<Real>(NS::momentum_y)), 78 207 : _rhow(declareADProperty<Real>(NS::momentum_z)), 79 207 : _v(declareADProperty<Real>(NS::v)), 80 207 : _specific_internal_energy(declareADProperty<Real>(NS::specific_internal_energy)), 81 207 : _pressure(declareADProperty<Real>(NS::pressure)), 82 207 : _grad_pressure(declareADProperty<RealVectorValue>(NS::grad(NS::pressure))), 83 207 : _specific_total_enthalpy(declareADProperty<Real>(NS::specific_total_enthalpy)), 84 207 : _rho_ht(declareADProperty<Real>(NS::total_enthalpy_density)), 85 207 : _superficial_rho_et(declareADProperty<Real>(NS::superficial_total_energy_density)), 86 207 : _superficial_rho_ht(declareADProperty<Real>(NS::superficial_total_enthalpy_density)), 87 207 : _T_fluid(declareADProperty<Real>(NS::T_fluid)), 88 414 : _grad_T_fluid(declareADProperty<RealVectorValue>(NS::grad(NS::T_fluid))) 89 : { 90 207 : } 91 : 92 : void 93 183032 : PorousConservedVarMaterial::computeQpProperties() 94 : { 95 183032 : _rho[_qp] = _var_rho[_qp]; 96 366064 : _superficial_rho[_qp] = _rho[_qp] * _epsilon[_qp]; 97 183032 : _mass_flux[_qp] = {_var_rho_ud[_qp], _var_rho_vd[_qp], _var_rho_wd[_qp]}; 98 183032 : _sup_mom_x[_qp] = _mass_flux[_qp](0); 99 183032 : _sup_mom_y[_qp] = _mass_flux[_qp](1); 100 183032 : _sup_mom_z[_qp] = _mass_flux[_qp](2); 101 366064 : _momentum[_qp] = _mass_flux[_qp] / _epsilon[_qp]; 102 183032 : _total_energy_density[_qp] = _var_total_energy_density[_qp]; 103 183032 : _superficial_rho_et[_qp] = _epsilon[_qp] * _total_energy_density[_qp]; 104 : 105 366064 : _superficial_velocity[_qp] = _mass_flux[_qp] / _rho[_qp]; 106 183032 : _sup_vel_x[_qp] = _superficial_velocity[_qp](0); 107 183032 : _sup_vel_y[_qp] = _superficial_velocity[_qp](1); 108 183032 : _sup_vel_z[_qp] = _superficial_velocity[_qp](2); 109 366064 : _grad_sup_vel_x[_qp] = _var_grad_rho_ud[_qp] / _rho[_qp] - 110 366064 : _var_rho_ud[_qp] / (_rho[_qp] * _rho[_qp]) * _var_grad_rho[_qp]; 111 366064 : _grad_sup_vel_y[_qp] = _var_grad_rho_vd[_qp] / _rho[_qp] - 112 366064 : _var_rho_vd[_qp] / (_rho[_qp] * _rho[_qp]) * _var_grad_rho[_qp]; 113 366064 : _grad_sup_vel_z[_qp] = _var_grad_rho_wd[_qp] / _rho[_qp] - 114 366064 : _var_rho_wd[_qp] / (_rho[_qp] * _rho[_qp]) * _var_grad_rho[_qp]; 115 : 116 366064 : _velocity[_qp] = _superficial_velocity[_qp] / _epsilon[_qp]; 117 183032 : _speed[_qp] = NS::computeSpeed<ADReal>(_velocity[_qp]); 118 183032 : _vel_x[_qp] = _velocity[_qp](0); 119 183032 : _vel_y[_qp] = _velocity[_qp](1); 120 183032 : _vel_z[_qp] = _velocity[_qp](2); 121 183032 : const auto grad_vel_x = _grad_sup_vel_x[_qp] / _epsilon[_qp]; 122 183032 : const auto grad_vel_y = _grad_sup_vel_y[_qp] / _epsilon[_qp]; 123 183032 : const auto grad_vel_z = _grad_sup_vel_z[_qp] / _epsilon[_qp]; 124 366064 : _rhou[_qp] = _vel_x[_qp] * _rho[_qp]; 125 366064 : _rhov[_qp] = _vel_y[_qp] * _rho[_qp]; 126 366064 : _rhow[_qp] = _vel_z[_qp] * _rho[_qp]; 127 : 128 366064 : _v[_qp] = 1 / _rho[_qp]; 129 366064 : const auto grad_v = (-1. / (_rho[_qp] * _rho[_qp])) * _var_grad_rho[_qp]; 130 : 131 183032 : _specific_internal_energy[_qp] = 132 549096 : _total_energy_density[_qp] / _rho[_qp] - (_velocity[_qp] * _velocity[_qp]) / 2; 133 : const auto grad_e = 134 366064 : _var_grad_rho_et[_qp] / _rho[_qp] - 135 366064 : _total_energy_density[_qp] / (_rho[_qp] * _rho[_qp]) * _var_grad_rho[_qp] - 136 366064 : (_vel_x[_qp] * grad_vel_x + _vel_y[_qp] * grad_vel_y + _vel_z[_qp] * grad_vel_z); 137 : 138 : ADReal dp_dv, dp_de; 139 183032 : _fluid.p_from_v_e(_v[_qp], _specific_internal_energy[_qp], _pressure[_qp], dp_dv, dp_de); 140 366064 : _grad_pressure[_qp] = dp_dv * grad_v + dp_de * grad_e; 141 : 142 366064 : _specific_total_enthalpy[_qp] = (_total_energy_density[_qp] + _pressure[_qp]) / _rho[_qp]; 143 366064 : _rho_ht[_qp] = _specific_total_enthalpy[_qp] * _rho[_qp]; 144 366064 : _superficial_rho_ht[_qp] = _rho_ht[_qp] * _epsilon[_qp]; 145 : 146 : ADReal dT_dv, dT_de; 147 183032 : _fluid.T_from_v_e(_v[_qp], _specific_internal_energy[_qp], _T_fluid[_qp], dT_dv, dT_de); 148 366064 : _grad_T_fluid[_qp] = dT_dv * grad_v + dT_de * grad_e; 149 183032 : }