22 "Source and sink of interfacial area for two-phase flow mixture model.");
23 params.
addRequiredParam<MooseFunctorName>(
"u",
"The velocity in the x direction.");
24 params.
addParam<MooseFunctorName>(
"v",
"The velocity in the y direction.");
25 params.
addParam<MooseFunctorName>(
"w",
"The velocity in the z direction.");
27 params.
addParam<MooseFunctorName>(
"L", 1.0,
"The characteristic dissipation length.");
30 "Dispersed phase density.");
33 "k_c", 0.0,
"Mass exchange coefficients from continous to dispersed phases.");
34 params.
addParam<MooseFunctorName>(
"fd", 0.0,
"Fraction dispersed phase.");
35 params.
addParam<Real>(
"fd_max", 1.0,
"Maximum dispersed phase fraction.");
37 params.
addParam<MooseFunctorName>(
"sigma", 1.0,
"Surface tension between phases.");
38 params.
addParam<MooseFunctorName>(
"particle_diameter", 1.0,
"Maximum particle diameter.");
40 params.
addParam<Real>(
"cutoff_fraction",
42 "Void fraction at which the interface area density mass transfer model is "
43 "activated. Below this fraction, spherical bubbles are assumed.");
45 params.
set<
unsigned short>(
"ghost_layers") = 2;
52 _dim(_subproblem.
mesh().dimension()),
53 _u_var(getFunctor<
ADReal>(
"u")),
54 _v_var(params.isParamValid(
"v") ? &(getFunctor<
ADReal>(
"v")) : nullptr),
55 _w_var(params.isParamValid(
"w") ? &(getFunctor<
ADReal>(
"w")) : nullptr),
56 _characheristic_length(getFunctor<
ADReal>(
"L")),
57 _rho_mixture(getFunctor<
ADReal>(
NS::density)),
58 _rho_d(getFunctor<
ADReal>(
NS::density +
std::string(
"_d"))),
59 _pressure(getFunctor<
ADReal>(
NS::pressure)),
60 _mass_exchange_coefficient(getFunctor<
ADReal>(
"k_c")),
61 _f_d(getFunctor<
ADReal>(
"fd")),
62 _f_d_max(getParam<Real>(
"fd_max")),
63 _sigma(getFunctor<
ADReal>(
"sigma")),
64 _particle_diameter(getFunctor<
ADReal>(
"particle_diameter")),
65 _cutoff_fraction(getParam<Real>(
"cutoff_fraction"))
68 paramError(
"v",
"In two or more dimensions, the v velocity must be supplied!");
71 paramError(
"w",
"In three or more dimensions, the w velocity must be supplied!");
77 using std::max, std::pow, std::exp, std::sqrt;
85 const auto u =
_u_var(elem_arg, state);
86 const auto rho_d =
_rho_d(elem_arg, state);
87 const auto rho_d_grad =
_rho_d.gradient(elem_arg, state);
88 const auto xi =
_var(elem_arg, state);
90 const auto f_d =
_f_d(elem_arg, state);
91 const auto sigma =
_sigma(elem_arg, state);
95 const auto f_d_o_xi_old =
99 ADReal material_time_derivative_rho_d = u * rho_d_grad(0);
102 material_time_derivative_rho_d += (*_v_var)(elem_arg, state) * rho_d_grad(1);
105 material_time_derivative_rho_d += (*_w_var)(elem_arg, state) * rho_d_grad(2);
109 material_time_derivative_rho_d +=
111 const auto bubble_compressibility = material_time_derivative_rho_d *
xi / 3.0;
116 bubble_added_mass = raw_value(
_rho_d(elem_arg, state)) *
127 velocity(1) = (*_v_var)(elem_arg, state);
129 velocity(2) = (*_w_var)(elem_arg, state);
132 const auto pressure_gradient = raw_value(
_pressure.gradient(elem_arg, state));
133 const Real pressure_grad_norm =
134 MooseUtils::isZero(pressure_gradient) ? 1e-42 : pressure_gradient.norm();
140 const auto interaction_prefactor =
141 Utility::pow<2>(f_d_o_xi) * u_eps / (
pow(
db, 11. / 3.) / complement_fd);
144 const auto f_c = interaction_prefactor *
_gamma_c * Utility::pow<2>(f_d);
145 const auto exp_c = exp(-
_Kc *
pow(
db, 5. / 6.) * sqrt(rho_l / sigma) * u_eps);
146 const auto s_rc = f_c * exp_c;
149 const auto f_b = interaction_prefactor *
_gamma_b * f_d * (1. - f_d);
150 const auto exp_b = exp(-
_Kb * sigma / (rho_l *
pow(
db, 5. / 3.) * Utility::pow<2>(u_eps)));
151 const auto s_rb = f_b * exp_b;
153 return -bubble_added_mass + bubble_compressibility + s_rc - s_rb;
DualNumber< Real, DNDerivativeType, true > ADReal
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
const GeochemicalDatabaseReader db("database/moose_testdb.json", true, true, false)
registerMooseObject("NavierStokesApp", WCNSFV2PInterfaceAreaSourceSink)
static InputParameters validParams()
MooseVariableFV< Real > & _var
const Elem *const & _current_elem
Moose::ElemArg makeElemArg(const Elem *elem, bool correct_skewnewss=false) const
void paramError(const std::string ¶m, Args... args) const
virtual bool isTransient() const=0
Moose::StateArg determineState() const
Computes source the sink terms for the interface area in the mixture model of two-phase flows.
static InputParameters validParams()
const Moose::Functor< ADReal > & _rho_d
Dispersed Phase Density.
const unsigned int _dim
The dimension of the domain.
ADReal computeQpResidual() override
static constexpr Real _Kb
static constexpr Real _gamma_c
Internal closure coefficients.
const Moose::Functor< ADReal > & _mass_exchange_coefficient
Interface Mass Exchange Coeefficient.
const Moose::Functor< ADReal > & _characheristic_length
Characterisitc Length.
static constexpr Real _gamma_b
const Moose::Functor< ADReal > & _pressure
Pressure field.
static constexpr Real _shape_factor
const Real _f_d_max
Maximum Void Fraction.
const Moose::Functor< ADReal > & _f_d
Void Fraction.
const Real _cutoff_fraction
Cutoff fraction at which the full mass transfer model is activated.
WCNSFV2PInterfaceAreaSourceSink(const InputParameters ¶meters)
const Moose::Functor< ADReal > * _v_var
y-velocity
const Moose::Functor< ADReal > & _u_var
x-velocity
const Moose::Functor< ADReal > * _w_var
z-velocity
const Moose::Functor< ADReal > & _sigma
Surface Tension.
const Moose::Functor< ADReal > & _rho_mixture
Mixture Density.
static constexpr Real _Kc
const Moose::Functor< ADReal > & _particle_diameter
Particle Diameter.
static const std::string density
template ADReal computeSpeed< ADReal >(const libMesh::VectorValue< ADReal > &velocity)
static const std::string pressure
static constexpr Real TOLERANCE