12 #include "MooseVariable.h"
20 InputParameters params = validParams<Kernel>();
21 params.addParam<
unsigned int>(
22 "fluid_component", 0,
"The index corresponding to the fluid component for this kernel");
23 params.addRequiredParam<UserObjectName>(
24 "PorousFlowDictator",
"The UserObject that holds the list of PorousFlow variable names");
25 params.addRequiredParam<std::vector<Real>>(
26 "disp_long",
"Vector of longitudinal dispersion coefficients for each phase");
27 params.addRequiredParam<std::vector<Real>>(
28 "disp_trans",
"Vector of transverse dispersion coefficients for each phase");
29 params.addRequiredParam<RealVectorValue>(
"gravity",
30 "Gravitational acceleration vector downwards (m/s^2)");
31 params.addClassDescription(
32 "Dispersive and diffusive flux of the component given by fluid_component in all phases");
39 _fluid_density_qp(getMaterialProperty<std::vector<Real>>(
"PorousFlow_fluid_phase_density_qp")),
40 _dfluid_density_qp_dvar(getMaterialProperty<std::vector<std::vector<Real>>>(
41 "dPorousFlow_fluid_phase_density_qp_dvar")),
42 _grad_mass_frac(getMaterialProperty<std::vector<std::vector<
RealGradient>>>(
43 "PorousFlow_grad_mass_frac_qp")),
44 _dmass_frac_dvar(getMaterialProperty<std::vector<std::vector<std::vector<Real>>>>(
45 "dPorousFlow_mass_frac_qp_dvar")),
46 _porosity_qp(getMaterialProperty<Real>(
"PorousFlow_porosity_qp")),
47 _dporosity_qp_dvar(getMaterialProperty<std::vector<Real>>(
"dPorousFlow_porosity_qp_dvar")),
48 _tortuosity(getMaterialProperty<std::vector<Real>>(
"PorousFlow_tortuosity_qp")),
50 getMaterialProperty<std::vector<std::vector<Real>>>(
"dPorousFlow_tortuosity_qp_dvar")),
52 getMaterialProperty<std::vector<std::vector<Real>>>(
"PorousFlow_diffusion_coeff_qp")),
53 _ddiffusion_coeff_dvar(getMaterialProperty<std::vector<std::vector<std::vector<Real>>>>(
54 "dPorousFlow_diffusion_coeff_qp_dvar")),
56 _fluid_component(getParam<unsigned int>(
"fluid_component")),
57 _num_phases(_dictator.numPhases()),
59 _relative_permeability(
60 getMaterialProperty<std::vector<Real>>(
"PorousFlow_relative_permeability_qp")),
61 _drelative_permeability_dvar(getMaterialProperty<std::vector<std::vector<Real>>>(
62 "dPorousFlow_relative_permeability_qp_dvar")),
63 _fluid_viscosity(getMaterialProperty<std::vector<Real>>(
"PorousFlow_viscosity_qp")),
64 _dfluid_viscosity_dvar(
65 getMaterialProperty<std::vector<std::vector<Real>>>(
"dPorousFlow_viscosity_qp_dvar")),
66 _permeability(getMaterialProperty<RealTensorValue>(
"PorousFlow_permeability_qp")),
68 getMaterialProperty<std::vector<RealTensorValue>>(
"dPorousFlow_permeability_qp_dvar")),
69 _dpermeability_dgradvar(getMaterialProperty<std::vector<std::vector<RealTensorValue>>>(
70 "dPorousFlow_permeability_qp_dgradvar")),
71 _grad_p(getMaterialProperty<std::vector<
RealGradient>>(
"PorousFlow_grad_porepressure_qp")),
72 _dgrad_p_dgrad_var(getMaterialProperty<std::vector<std::vector<Real>>>(
73 "dPorousFlow_grad_porepressure_qp_dgradvar")),
74 _dgrad_p_dvar(getMaterialProperty<std::vector<std::vector<
RealGradient>>>(
75 "dPorousFlow_grad_porepressure_qp_dvar")),
76 _gravity(getParam<RealVectorValue>(
"gravity")),
77 _disp_long(getParam<std::vector<Real>>(
"disp_long")),
78 _disp_trans(getParam<std::vector<Real>>(
"disp_trans")),
79 _perm_derivs(_dictator.usePermDerivs())
85 "The number of longitudinal dispersion coefficients is not equal to the number of phases");
88 paramError(
"disp_trans",
89 "The number of transverse dispersion coefficients disp_trans in is not equal to the "
96 RealVectorValue flux = 0.0;
97 RealVectorValue velocity;
113 velocity_abs = std::sqrt(velocity * velocity);
115 if (velocity_abs > 0.0)
117 v2.vectorOuterProduct(velocity, velocity);
127 return _grad_test[_i][_qp] * flux;
151 RealVectorValue velocity;
157 RealVectorValue flux = 0.0;
158 RealVectorValue dflux = 0.0;
169 velocity_abs = std::sqrt(velocity * velocity);
171 if (velocity_abs > 0.0)
173 v2.vectorOuterProduct(velocity, velocity);
181 RealVectorValue dvelocity =
191 for (
unsigned int i = 0; i < LIBMESH_DIM; ++i)
203 Real dvelocity_abs = 0.0;
204 if (velocity_abs > 0.0)
205 dvelocity_abs = velocity * dvelocity / velocity_abs;
219 if (velocity_abs > 0.0)
222 dv2a.vectorOuterProduct(velocity, dvelocity);
223 dv2b.vectorOuterProduct(dvelocity, velocity);
242 return _grad_test[_i][_qp] * dflux;