Exemplo n.º 1
0
Real
PorousFlowHalfCubicSink::dmultiplier_dvar(unsigned int pvar) const
{
  const Real x = ptVar() - _center;

  if (x >= 0)
    return PorousFlowSink::dmultiplier_dvar(pvar) * _maximum;

  const Real cutoff = _cutoff.value(_t, _q_point[_qp]);
  if (x <= cutoff)
    return 0.0;

  const Real str =
      _maximum * (2 * x + cutoff) * (x - cutoff) * (x - cutoff) / Utility::pow<3>(cutoff);
  const Real deriv = _maximum * 6 * x * (x - cutoff) / Utility::pow<3>(cutoff);
  return PorousFlowSink::dmultiplier_dvar(pvar) * str +
         PorousFlowSink::multiplier() * deriv * dptVar(pvar);
}
Exemplo n.º 2
0
Real
PorousFlowHalfGaussianSink::dmultiplier_dvar(unsigned int pvar)
{
  if (ptVar() >= _center)
    return PorousFlowSink::dmultiplier_dvar(pvar) * _maximum;
  const Real str = _maximum * std::exp(-0.5 * std::pow((ptVar() - _center) / _sd, 2));
  return PorousFlowSink::dmultiplier_dvar(pvar) * str + PorousFlowSink::multiplier() * str * (_center - ptVar()) / std::pow(_sd, 2) * dptVar(pvar);
}