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); }
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); }