Go to the documentation of this file.
19 params.addRequiredParam<std::vector<Real>>(
21 "Tuple of pressure (or temperature) values. Must be monotonically increasing.");
22 params.addRequiredParam<std::vector<Real>>(
24 "Tuple of flux values (measured in kg.m^-1.s^-1 if no 'use_*' are employed). "
25 "These flux values are multiplied by the line-segment length to achieve a flux in "
26 "kg.s^-1. A piecewise-linear fit is performed to the (p_or_t_vals,flux) pairs to "
27 "obtain the flux at any arbitrary pressure (or temperature). If a quad-point "
28 "pressure is less than the first pressure value, the first flux value is used. If "
29 "quad-point pressure exceeds the final pressure value, the final flux value is "
30 "used. This flux is OUT of the medium: hence positive values of flux means this "
31 "will be a SINK, while negative values indicate this flux will be a SOURCE.");
32 params.addClassDescription(
33 "Approximates a polyline sink by using a number of point sinks with "
34 "given weighting whose positions are read from a file. NOTE: if you are using "
35 "PorousFlowPorosity that depends on volumetric strain, you should set "
36 "strain_at_nearest_qp=true in your GlobalParams, to ensure the nodal Porosity Material uses "
37 "the volumetric strain at the Dirac quadpoints, and can therefore be computed");
43 _sink_func(getParam<std::vector<Real>>(
"p_or_t_vals"), getParam<std::vector<Real>>(
"fluxes"))
52 if (current_dirac_ptid > 0)
57 if (current_dirac_ptid + 1 <
_zs.size() ||
_zs.size() == 1)
61 return outflow * _test[_i][_qp] *
_sink_func.sample(
ptqp()) *
_rs[current_dirac_ptid];
66 unsigned current_dirac_ptid,
68 Real & outflowp)
const
77 if (current_dirac_ptid > 0)
82 if (current_dirac_ptid + 1 <
_zs.size() ||
_zs.size() == 1)
87 _phi[_j][_qp] *
_rs[current_dirac_ptid];
Approximates a line sink a sequence of Dirac Points.
Approximates a line sink by a sequence of Dirac Points.
InputParameters validParams< PorousFlowPolyLineSink >()
InputParameters validParams< PorousFlowLineSink >()
std::vector< Real > _rs
Radii of the borehole.
bool notPorousFlowVariable(unsigned int moose_var_num) const
Returns true if moose_var_num is not a porous flow variabe.
Real computeQpBaseOutflow(unsigned current_dirac_ptid) const override
Returns the flux from the line sink (before modification by mobility, etc). Derived classes should ov...
unsigned int porousFlowVariableNum(unsigned int moose_var_num) const
The PorousFlow variable number.
PorousFlowPolyLineSink(const InputParameters ¶meters)
registerMooseObject("PorousFlowApp", PorousFlowPolyLineSink)
LinearInterpolation _sink_func
mass flux = _sink_func as a function of porepressure or temperature
void computeQpBaseOutflowJacobian(unsigned jvar, unsigned current_dirac_ptid, Real &outflow, Real &outflowp) const override
Calculates the BaseOutflow as well as its derivative wrt jvar. Derived classes should override this.
Real dptqp(unsigned pvar) const
If _p_or_t==0, then returns d(quadpoint porepressure)/d(PorousFlow variable), else returns d(quadpoin...
std::vector< Real > _zs
z points of borehole
std::vector< Real > _half_seg_len
0.5*(length of polyline segments between points)
Real ptqp() const
If _p_or_t==0, then returns the quadpoint porepressure, else returns the quadpoint temperature.
const PorousFlowDictator & _dictator
PorousFlowDictator UserObject.