43#ifndef OPENSWMM_ENGINE_2D_DIFFUSIVE_KERNELS_HPP
44#define OPENSWMM_ENGINE_2D_DIFFUSIVE_KERNELS_HPP
49#ifndef OPENSWMM_KERNEL_FN
50#define OPENSWMM_KERNEL_FN inline
59 double s_eps)
noexcept {
60 if (!(hf > 0.0) || !(nf > 0.0) || slope == 0.0)
return 0.0;
61 const double h53 = hf * std::cbrt(hf * hf);
62 const double sa = std::fabs(slope);
63 const double sr = std::sqrt((sa > s_eps) ? sa : s_eps);
64 return -h53 * slope / (nf * sr);
72 double n,
double slope_abs,
73 double s_eps)
noexcept {
74 if (!(h > 0.0))
return 1.0e30;
75 const double h53 = h * std::cbrt(h * h);
76 const double s = (slope_abs > s_eps) ? slope_abs : s_eps;
77 return alpha * lchar * lchar * n * std::sqrt(s) / (4.0 * h53);
#define OPENSWMM_KERNEL_FN
Definition ExplicitKokkosSurfaceSolver.cpp:18
Definition DiffusiveKernels.hpp:53
OPENSWMM_KERNEL_FN double cellDiffusiveDt(double alpha, double lchar, double h, double n, double slope_abs, double s_eps) noexcept
Definition DiffusiveKernels.hpp:71
OPENSWMM_KERNEL_FN double faceDischarge(double hf, double slope, double nf, double s_eps) noexcept
Definition DiffusiveKernels.hpp:58