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