11#include "libmesh/utility.h"
23 "thermal_opening_coeff",
24 "Change in porosity per unit heat content of the adjacent matrix. The heat content, "
25 "I = int (T - matrix_reference_temperature) dz, has units K.m, so when porosity represents "
26 "the aperture of a lower-dimensional fracture this coefficient has units 1/K. Porosity "
27 "changes by -thermal_opening_coeff * I, so cooling (I < 0) opens the fracture when this "
28 "coefficient is positive");
30 "matrix_thermal_diffusivity",
31 "matrix_thermal_diffusivity > 0",
32 "Thermal diffusivity of the matrix adjacent to the "
33 "fracture (thermal conductivity divided by "
34 "volumetric heat capacity), m^2/s. This is the diffusivity in the "
35 "direction normal to the fracture (or the matrix is "
36 "assumed isotropic), and it is assumed constant");
38 "matrix_reference_temperature",
39 "Undisturbed temperature of the matrix adjacent to the fracture. This should usually be a "
40 "linear-lagrange variable or a constant");
44 "Time at which the temperature at the fracture face first starts to change "
45 "(for instance, when injection begins). The matrix adjacent to the fracture "
46 "is at matrix_reference_temperature at this time, and the thermal-opening "
47 "term is zero before it");
49 "This Material calculates porosity (usually the aperture of a lower-dimensional fracture) "
50 "using the PorousFlowPorosityLinear relationship plus a thermal-opening term proportional to "
51 "the heat content of the adjacent matrix, which is computed using the semi-analytic method "
52 "of Vinsome and Westerveld (1980)");
59 _thermal_opening_coeff(getParam<Real>(
"thermal_opening_coeff")),
60 _kappa(getParam<Real>(
"matrix_thermal_diffusivity")),
61 _T_matrix_ref(nodalOrQpValue(
"matrix_reference_temperature")),
62 _start_time(getParam<Real>(
"vw_start_time")),
63 _theta(_nodal_material ? declareProperty<Real>(
"PorousFlow_vw_theta_nodal")
64 : declareProperty<Real>(
"PorousFlow_vw_theta_qp")),
65 _theta_old(_nodal_material ? getMaterialPropertyOld<Real>(
"PorousFlow_vw_theta_nodal")
66 : getMaterialPropertyOld<Real>(
"PorousFlow_vw_theta_qp")),
67 _heat_content(_nodal_material ? declareProperty<Real>(
"PorousFlow_vw_heat_content_nodal")
68 : declareProperty<Real>(
"PorousFlow_vw_heat_content_qp")),
69 _heat_content_old(_nodal_material
70 ? getMaterialPropertyOld<Real>(
"PorousFlow_vw_heat_content_nodal")
71 : getMaterialPropertyOld<Real>(
"PorousFlow_vw_heat_content_qp"))
80 mooseError(
"PorousFlowPorosityVinsomeWesterveld: a temperature Material is required");
113 const Real
a =
_kappa * std::min(_dt, time);
118 const Real
d = 0.5 * std::sqrt(
_kappa * time);
119 const Real denom = 3.0 *
d *
d +
a;
125 const Real dp_dT = (
a /
d - Utility::pow<3>(
d) /
a) / denom;
126 dI_dT =
a * (1.0 /
d - dp_dT);
130 for (
unsigned int pvar = 0; pvar <
_num_var; ++pvar)
void mooseError(Args &&... args)
registerMooseObject("PorousFlowApp", PorousFlowPorosityVinsomeWesterveld)
const unsigned int _num_var
Number of PorousFlow variables.
MaterialProperty< std::vector< Real > > *const _dporosity_dvar
d(porosity)/d(PorousFlow variable)
GenericMaterialProperty< Real, is_ad > & _porosity
Computed porosity at the nodes or quadpoints.
Material designed to provide the porosity in PorousFlow simulations porosity_ref + P_coeff * (P - P_r...
virtual void initQpStatefulProperties() override
static InputParameters validParams()
const MaterialProperty< std::vector< Real > > * _dtemperature_dvar
virtual void initialSetup() override
virtual void computeUnboundedPorosityQp()
Computes porosity and its derivatives at the current node or quadrature point, without applying the p...
const MaterialProperty< Real > * _temperature
Porosity (typically the aperture of a lower-dimensional fracture) given by the PorousFlowPorosityLine...
virtual void initialSetup() override
virtual void computeUnboundedPorosityQp() override
Computes porosity and its derivatives at the current node or quadrature point, without applying the p...
const VariableValue & _T_matrix_ref
Undisturbed (reference) matrix temperature.
const Real _kappa
Thermal diffusivity of the matrix in the direction normal to the fracture (m^2/s),...
const Real _thermal_opening_coeff
Change of porosity per unit matrix heat content (units 1/K when porosity is an aperture)
const MaterialProperty< Real > & _heat_content_old
Old value of the heat content.
const MaterialProperty< Real > & _theta_old
Old value of theta.
const Real _start_time
Time at which the matrix temperature profile is undisturbed.
static InputParameters validParams()
virtual void initQpStatefulProperties() override
MaterialProperty< Real > & _theta
Temperature change at the fracture face, theta = T - T_matrix_ref.
MaterialProperty< Real > & _heat_content
Heat content of the adjacent matrix, I = int (T - T_matrix_ref) dz.
PorousFlowPorosityVinsomeWesterveld(const InputParameters ¶meters)