13#include "libmesh/quadrature.h"
23 params.
addParam<std::string>(
"base_name",
24 "This should be the same base_name as given to the TensorMechanics "
25 "object that computes strain");
28 "The displacements appropriate for the simulation geometry and coordinate system");
30 "Compute volumetric strain and the volumetric_strain rate, for use in PorousFlow.");
31 params.
set<std::string>(
"pf_material_type") =
"volumetric_strain";
32 params.
set<
bool>(
"stateful_displacements") =
true;
33 params.
set<
bool>(
"at_nodes") =
false;
41 _base_name(isParamValid(
"base_name") ? getParam<
std::string>(
"base_name") +
"_" :
""),
42 _total_strain(getGenericMaterialProperty<
RankTwoTensor, is_ad>(_base_name +
"total_strain")),
43 _total_strain_old(getMaterialPropertyOld<
RankTwoTensor>(_base_name +
"total_strain")),
44 _ndisp(coupledComponents(
"displacements")),
45 _disp_var_num(coupledIndices(
"displacements")),
48 declareGenericProperty<Real, is_ad>(
"PorousFlow_volumetric_strain_rate_qp")),
49 _dvol_strain_rate_qp_dvar(is_ad ? nullptr
50 : &declareProperty<
std::vector<RealGradient>>(
51 "dPorousFlow_volumetric_strain_rate_qp_dvar")),
53 declareGenericProperty<Real, is_ad>(
"PorousFlow_total_volumetric_strain_qp")),
54 _dvol_total_strain_qp_dvar(is_ad ? nullptr
55 : &declareProperty<
std::vector<RealGradient>>(
56 "dPorousFlow_total_volumetric_strain_qp_dvar"))
58 if (
_ndisp != _mesh.dimension())
59 paramError(
"displacements",
"The number of variables supplied must match the mesh dimension.");
62 mooseError(
"PorousFlowVolumetricStrain classes are only defined for at_nodes = false");
69 _vol_total_strain_qp[_qp] = 0.0;
76 _vol_total_strain_qp[_qp] = _total_strain[_qp].trace();
77 _vol_strain_rate_qp[_qp] = (_vol_total_strain_qp[_qp] - _total_strain_old[_qp].trace()) / _dt;
83 (*_dvol_strain_rate_qp_dvar)[_qp].resize(_num_var, RealGradient());
84 (*_dvol_total_strain_qp_dvar)[_qp].resize(_num_var, RealGradient());
85 for (
unsigned i = 0; i < _ndisp; ++i)
86 if (_dictator.isPorousFlowVariable(_disp_var_num[i]))
89 const unsigned int pvar = _dictator.porousFlowVariableNum(_disp_var_num[i]);
90 (*_dvol_strain_rate_qp_dvar)[_qp][pvar](i) = 1.0 / _dt;
91 (*_dvol_total_strain_qp_dvar)[_qp][pvar](i) = 1.0;
void mooseError(Args &&... args)
registerMooseObject("PorousFlowApp", PorousFlowVolumetricStrain)
Base class for all PorousFlow vector materials.
static InputParameters validParams()
PorousFlowVolumetricStrain computes volumetric strains, and derivatives thereof.
static InputParameters validParams()
const unsigned int _ndisp
Number of displacements supplied (1 in 1D, 2 in 2D, 3 in 3D)
PorousFlowVolumetricStrainTempl(const InputParameters ¶meters)
virtual void computeQpProperties() override
virtual void initQpStatefulProperties() override