32 _num_phases(_dictator.numPhases()),
33 _num_var(_dictator.numVariables()),
34 _permeability(getGenericMaterialProperty<RealTensorValue, is_ad>(
"PorousFlow_permeability_qp")),
35 _dpermeability_dvar(is_ad ? nullptr
36 : &getMaterialProperty<
std::vector<RealTensorValue>>(
37 "dPorousFlow_permeability_qp_dvar")),
38 _dpermeability_dgradvar(is_ad ? nullptr
39 : &getMaterialProperty<
std::vector<
std::vector<RealTensorValue>>>(
40 "dPorousFlow_permeability_qp_dgradvar")),
42 getGenericMaterialProperty<
std::vector<Real>, is_ad>(
"PorousFlow_fluid_phase_density_qp")),
43 _dfluid_density_dvar(is_ad ? nullptr
44 : &getMaterialProperty<
std::vector<
std::vector<Real>>>(
45 "dPorousFlow_fluid_phase_density_qp_dvar")),
47 getGenericMaterialProperty<
std::vector<Real>, is_ad>(
"PorousFlow_viscosity_qp")),
48 _dfluid_viscosity_dvar(is_ad ? nullptr
49 : &getMaterialProperty<
std::vector<
std::vector<Real>>>(
50 "dPorousFlow_viscosity_qp_dvar")),
51 _relative_permeability(getGenericMaterialProperty<
std::vector<Real>, is_ad>(
52 "PorousFlow_relative_permeability_qp")),
53 _drelative_permeability_dvar(is_ad ? nullptr
54 : &getMaterialProperty<
std::vector<
std::vector<Real>>>(
55 "dPorousFlow_relative_permeability_qp_dvar")),
56 _grad_p(getGenericMaterialProperty<
std::vector<RealGradient>, is_ad>(
57 "PorousFlow_grad_porepressure_qp")),
58 _dgrad_p_dgradvar(is_ad ? nullptr
59 : &getMaterialProperty<
std::vector<
std::vector<Real>>>(
60 "dPorousFlow_grad_porepressure_qp_dgradvar")),
61 _dgrad_p_dvar(is_ad ? nullptr
62 : &getMaterialProperty<
std::vector<
std::vector<RealGradient>>>(
63 "dPorousFlow_grad_porepressure_qp_dvar")),
64 _gravity(getParam<RealVectorValue>(
"gravity")),
65 _darcy_velocity(declareGenericProperty<
std::vector<RealVectorValue>, is_ad>(
66 "PorousFlow_darcy_velocity_qp")),
67 _ddarcy_velocity_dvar(is_ad ? nullptr
68 : &declareProperty<
std::vector<
std::vector<RealVectorValue>>>(
69 "dPorousFlow_darcy_velocity_qp_dvar")),
70 _ddarcy_velocity_dgradvar(
72 : &declareProperty<
std::vector<
std::vector<
std::vector<RealVectorValue>>>>(
73 "dPorousFlow_darcy_velocity_qp_dgradvar"))
76 mooseError(
"PorousFlowDarcyVelocityMaterial is only defined for at_nodes = false");
83 _darcy_velocity[_qp].resize(_num_phases);
85 for (
unsigned ph = 0; ph < _num_phases; ++ph)
86 _darcy_velocity[_qp][ph] =
87 -(_permeability[_qp] * (_grad_p[_qp][ph] - _fluid_density[_qp][ph] * _gravity) *
88 _relative_permeability[_qp][ph] / _fluid_viscosity[_qp][ph]);
92 (*_ddarcy_velocity_dvar)[_qp].resize(_num_phases);
93 for (
unsigned ph = 0; ph < _num_phases; ++ph)
94 (*_ddarcy_velocity_dvar)[_qp][ph].resize(_num_var);
96 for (
unsigned ph = 0; ph < _num_phases; ++ph)
97 for (
unsigned v = 0;
v < _num_var; ++
v)
99 (*_ddarcy_velocity_dvar)[_qp][ph][
v] =
100 -(*_dpermeability_dvar)[_qp][
v] *
101 (_grad_p[_qp][ph] - _fluid_density[_qp][ph] * _gravity) *
102 _relative_permeability[_qp][ph] / _fluid_viscosity[_qp][ph];
103 (*_ddarcy_velocity_dvar)[_qp][ph][
v] -=
105 ((*_dgrad_p_dvar)[_qp][ph][
v] - (*_dfluid_density_dvar)[_qp][ph][
v] * _gravity) *
106 _relative_permeability[_qp][ph] / _fluid_viscosity[_qp][ph];
107 (*_ddarcy_velocity_dvar)[_qp][ph][
v] -=
108 _permeability[_qp] * (_grad_p[_qp][ph] - _fluid_density[_qp][ph] * _gravity) *
109 ((*_drelative_permeability_dvar)[_qp][ph][
v] / _fluid_viscosity[_qp][ph] -
110 _relative_permeability[_qp][ph] * (*_dfluid_viscosity_dvar)[_qp][ph][
v] /
111 std::pow(_fluid_viscosity[_qp][ph], 2));
114 (*_ddarcy_velocity_dgradvar)[_qp].resize(_num_phases);
115 for (
unsigned ph = 0; ph < _num_phases; ++ph)
117 (*_ddarcy_velocity_dgradvar)[_qp][ph].resize(LIBMESH_DIM);
118 for (
unsigned i = 0; i < LIBMESH_DIM; ++i)
119 (*_ddarcy_velocity_dgradvar)[_qp][ph][i].resize(_num_var);
122 for (
unsigned ph = 0; ph < _num_phases; ++ph)
123 for (
unsigned i = 0; i < LIBMESH_DIM; ++i)
124 for (
unsigned v = 0;
v < _num_var; ++
v)
126 (*_ddarcy_velocity_dgradvar)[_qp][ph][i][
v] =
127 -(*_dpermeability_dgradvar)[_qp][i][
v] *
128 (_grad_p[_qp][ph] - _fluid_density[_qp][ph] * _gravity);
129 for (
unsigned j = 0; j < LIBMESH_DIM; ++j)
130 (*_ddarcy_velocity_dgradvar)[_qp][ph][i][
v](j) -=
131 _permeability[_qp](j, i) * (*_dgrad_p_dgradvar)[_qp][ph][
v];
132 (*_ddarcy_velocity_dgradvar)[_qp][ph][i][
v] *=
133 _relative_permeability[_qp][ph] / _fluid_viscosity[_qp][ph];