59 _dim(_mesh.dimension()),
60 _sup_vel_x_elem(getADMaterialProperty<Real>(
NS::superficial_velocity_x)),
61 _sup_vel_x_neighbor(getNeighborADMaterialProperty<Real>(
NS::superficial_velocity_x)),
63 getADMaterialProperty<RealVectorValue>(
NS::grad(
NS::superficial_velocity_x))),
64 _grad_sup_vel_x_neighbor(
65 getNeighborADMaterialProperty<RealVectorValue>(
NS::grad(
NS::superficial_velocity_x))),
66 _sup_vel_y_elem(getADMaterialProperty<Real>(
NS::superficial_velocity_y)),
67 _sup_vel_y_neighbor(getNeighborADMaterialProperty<Real>(
NS::superficial_velocity_y)),
69 getADMaterialProperty<RealVectorValue>(
NS::grad(
NS::superficial_velocity_y))),
70 _grad_sup_vel_y_neighbor(
71 getNeighborADMaterialProperty<RealVectorValue>(
NS::grad(
NS::superficial_velocity_y))),
72 _sup_vel_z_elem(getADMaterialProperty<Real>(
NS::superficial_velocity_z)),
73 _sup_vel_z_neighbor(getNeighborADMaterialProperty<Real>(
NS::superficial_velocity_z)),
75 getADMaterialProperty<RealVectorValue>(
NS::grad(
NS::superficial_velocity_z))),
76 _grad_sup_vel_z_neighbor(
77 getNeighborADMaterialProperty<RealVectorValue>(
NS::grad(
NS::superficial_velocity_z))),
78 _T_fluid_elem(getADMaterialProperty<Real>(
NS::T_fluid)),
79 _T_fluid_neighbor(getNeighborADMaterialProperty<Real>(
NS::T_fluid)),
80 _grad_T_fluid_elem(getADMaterialProperty<RealVectorValue>(
NS::grad(
NS::T_fluid))),
81 _grad_T_fluid_neighbor(getNeighborADMaterialProperty<RealVectorValue>(
NS::grad(
NS::T_fluid))),
82 _pressure_elem(getADMaterialProperty<Real>(
NS::pressure)),
83 _pressure_neighbor(getNeighborADMaterialProperty<Real>(
NS::pressure)),
84 _grad_pressure_elem(getADMaterialProperty<RealVectorValue>(
NS::grad(
NS::pressure))),
85 _grad_pressure_neighbor(getNeighborADMaterialProperty<RealVectorValue>(
NS::grad(
NS::pressure))),
86 _eps_elem(getMaterialProperty<Real>(
NS::porosity)),
87 _eps_neighbor(getNeighborMaterialProperty<Real>(
NS::porosity)),
89 _index(getParam<
MooseEnum>(
"momentum_component")),
90 _sup_vel_provided(isParamValid(
NS::superficial_velocity)),
91 _pressure_provided(isParamValid(
NS::pressure)),
92 _T_fluid_provided(isParamValid(
NS::T_fluid)),
93 _sup_vel_function(_sup_vel_provided ? &getFunction(
NS::superficial_velocity) : nullptr),
94 _pressure_function(_pressure_provided ? &getFunction(
NS::pressure) : nullptr),
95 _T_fluid_function(_T_fluid_provided ? &getFunction(
NS::T_fluid) : nullptr),
97 _scalar_neighbor(_u_neighbor),
98 _grad_scalar_elem((_eqn ==
"scalar") ? &_var.adGradSln() : nullptr),
99 _grad_scalar_neighbor((_eqn ==
"scalar") ? &_var.adGradSlnNeighbor() : nullptr),
100 _scalar_function_provided(isParamValid(
"scalar")),
101 _scalar_function(_scalar_function_provided ? &getFunction(
"scalar") : nullptr),
102 _velocity_function_includes_rho(getParam<bool>(
"velocity_function_includes_rho")),
104 isParamValid(
"mfr_postprocessor")
110 "If 'momentum' is specified for 'eqn', then you must provide a parameter "
111 "value for 'momentum_component'");
114 "'momentum_component' should not be specified when the 'eqn' is not 'momentum'");
121 const bool out_of_elem = (ft == FaceInfo::VarFaceNeighbors::ELEM);
130 const auto & grad_sup_vel_x_interior =
132 const auto & grad_sup_vel_y_interior =
134 const auto & grad_sup_vel_z_interior =
136 const auto & grad_pressure_interior =
138 const auto & grad_T_fluid_interior =
140 const auto & interior_centroid =
145 const auto pressure_boundary =
147 : pressure_interior + grad_pressure_interior * dCf;
148 const auto T_fluid_boundary =
150 : T_fluid_interior + grad_T_fluid_interior * dCf;
151 const auto rho_boundary =
_fluid.rho_from_p_T(pressure_boundary, T_fluid_boundary);
153 ADReal sup_vel_x_boundary;
158 sup_vel_x_boundary /= rho_boundary;
161 sup_vel_x_boundary = sup_vel_x_interior + grad_sup_vel_x_interior * dCf;
163 ADReal sup_vel_y_boundary = 0;
170 sup_vel_y_boundary /= rho_boundary;
173 sup_vel_y_boundary = sup_vel_y_interior + grad_sup_vel_y_interior * dCf;
176 ADReal sup_vel_z_boundary = 0;
183 sup_vel_z_boundary /= rho_boundary;
186 sup_vel_z_boundary = sup_vel_z_interior + grad_sup_vel_z_interior * dCf;
189 const VectorValue<ADReal> sup_vel_boundary(
190 sup_vel_x_boundary, sup_vel_y_boundary, sup_vel_z_boundary);
191 const auto eps_boundary = eps_interior;
192 const auto u_boundary = sup_vel_boundary / eps_boundary;
193 const auto e_boundary =
_fluid.e_from_p_T(pressure_boundary, T_fluid_boundary);
197 const ADReal mfr = rho_boundary * sup_vel_boundary *
normal;
202 else if (
_eqn ==
"momentum")
204 const auto rhou_boundary = u_boundary(
_index) * rho_boundary;
205 return rhou_boundary * sup_vel_boundary *
normal +
208 else if (
_eqn ==
"energy")
210 const auto ht_boundary =
211 e_boundary + 0.5 * u_boundary * u_boundary + pressure_boundary / rho_boundary;
212 const auto rho_ht_boundary = rho_boundary * ht_boundary;
213 return rho_ht_boundary * sup_vel_boundary *
normal;
215 else if (
_eqn ==
"scalar")
218 const auto & grad_scalar_interior =
219 out_of_elem ? (*_grad_scalar_elem)[
_qp] : (*_grad_scalar_neighbor)[
_qp];
220 const auto scalar_boundary =
222 : scalar_interior + grad_scalar_interior * dCf;
223 return rho_boundary * scalar_boundary * sup_vel_boundary *
normal;
This postprocessor computes the volumetric flow rate through a boundary.
void setMfr(const FaceInfo *fi, Real mfr, bool includes_area=true)