23#ifndef GPU_FACE_ESTIMATES_H
24#define GPU_FACE_ESTIMATES_H
50 fv_l = (
Realf)(1.0/840.0) * (
61 fd_l = (
Realf)(1.0/5040.0) * (
74 fv_l = (
Realf)(1.0/60.0) * (values[(
k-3)*stride+
index]
79 + values[(
k+2)*stride+
index]);
117 const Realf hkMinus2 = h[
k-2];
118 const Realf hkMinus1 = h[
k-1];
120 const Realf hkPlus1 = h[
k+1];
122 (
Realf)(1.0) / ( hkMinus2 + hkMinus1 + hk + hkPlus1 )
123 * ( ( hkMinus2 + hkMinus1 ) * ( hk + hkPlus1 ) / ( hkMinus1 + hk )
124 * ( u[(
k-1)*stride+
index] * hk + u[
k*stride+
index] * hkMinus1 )
125 * ((
Realf)(1.0) / ( hkMinus2 + hkMinus1 + hk ) + (
Realf)(1.0) / ( hkMinus1 + hk + hkPlus1 ) )
126 + ( hk * ( hk + hkPlus1 ) ) / ( ( hkMinus2 + hkMinus1 + hk ) * (hkMinus2 + hkMinus1 ) )
127 * ( u[(
k-1)*stride+
index] * (hkMinus2 + (
Realf)(2.0) * hkMinus1 ) - ( u[(
k-2)*stride+
index] * hkMinus1 ) )
128 + hkMinus1 * ( hkMinus2 + hkMinus1 ) / ( ( hkMinus1 + hk + hkPlus1 ) * ( hk + hkPlus1 ) )
129 * ( u[
k*stride+
index] * ( (
Realf)(2.0) * hk + hkPlus1 ) - u[(
k+1)*stride+
index] * hk ) )
171 Realf slope_abs,slope_sign;
177 bool is_extrema = (slope_abs == (
Realf)(0.0));
179 fv_r = (is_extrema) ? values[
k*stride+
index] : fv_r;
180 fv_l = (is_extrema) ? values[
k*stride+
index] : fv_l;
181 fd_l = (is_extrema) ? (
Realf)(0.0) : fd_l;
182 fd_r = (is_extrema) ? (
Realf)(0.0) : fd_r;
185 bool filter = (values[(
k-1)*stride+
index] - fv_l) * (fv_l - values[
k*stride+
index]) < (
Realf)(0.0) || slope_sign * fd_l < (
Realf)(0.0);
188 fv_l= (filter) ? values[
k*stride+
index] - slope_sign * (
Realf)(0.5) * slope_abs : fv_l;
189 fd_l= (filter) ? slope_sign * slope_abs : fd_l;
192 filter = (values[(
k+1)*stride+
index] - fv_r) * (fv_r - values[
k*stride+
index]) < (
Realf)(0.0) || slope_sign * fd_r < (
Realf)(0.0);
195 fv_r= (filter) ? values[
k*stride+
index] + slope_sign * (
Realf)(0.5) * slope_abs : fv_r;
196 fd_r= (filter) ? slope_sign * slope_abs : fd_r;
226 Realf slope_abs, slope_sign;
233 bool is_extrema = (slope_abs == (
Realf)(0.0));
235 fv_r = (is_extrema) ? values[
k*stride+
index] : fv_r;
236 fv_l = (is_extrema) ? values[
k*stride+
index] : fv_l;
239 bool filter = (values[(
k-1)*stride+
index] - fv_l) * (fv_l - values[
k*stride+
index]) < (
Realf)(0.0) ;
242 fv_l = (filter) ? values[
k*stride+
index] - slope_sign * (
Realf)(0.5) * slope_abs : fv_l;
245 filter = (values[(
k+1)*stride+
index] - fv_r) * (fv_r - values[
k*stride+
index]) < (
Realf)(0.0);
248 fv_r = (filter) ? values[
k*stride+
index] + slope_sign * (
Realf)(0.5) * slope_abs : fv_r;
270 printf(
"Order %d has not been implemented (yet)\n",order);
273 Realf slope_abs,slope_sign;
284 if (slope_abs == (
Realf)(0.0)) {
285 fv_r = values[
k*stride+
index];
286 fv_l = values[
k*stride+
index];
290 if ((values[(
k-1)*stride+
index] - fv_l) * (fv_l - values[
k*stride+
index]) < (
Realf)(0.0)) {
292 fv_l=values[
k*stride+
index] - slope_sign * (
Realf)(0.5) * slope_abs;
296 if ((values[(
k+1)*stride+
index] - fv_r) * (fv_r - values[
k*stride+
index]) < (
Realf)(0.0)) {
298 fv_r=values[
k*stride+
index] + slope_sign * (
Realf)(0.5) * slope_abs;
305 Realf invh2 = 1.0 / (h[
k] * h[
k]);
306 Realf d2a = invh2 * 3.0 * (values[
k*stride +
index] - 2.0 * fv + values[(
k+1)*stride+
index]);
307 Realf d2aL = invh2 * (values[(
k-1)*stride+
index] - 2.0 * values[
k*stride +
index] + values[(
k+1)*stride+
index]);
308 Realf d2aR = invh2 * (values[
k*stride +
index] - 2.0 * values[(
k+1)*stride+
index] + values[(
k+2)*stride+
index]);
310 if ( (d2a * d2aL >= 0) && (d2a * d2aR >= 0) && (d2a != 0) ) {
320 const Realf C = 1.25;
321 Realf invh2 = 1.0 / (h[
k] * h[
k]);
330 Realf d2a = -2.0 * invh2 * 6.0 * (values[
k*stride+
index] - 3.0 * (m_face + p_face));
339 if ( (d2a * d2aL >= 0) && (d2a * d2aR >= 0) &&
340 (d2a * d2aC >= 0) && (d2a != 0) ) {
353 fv_r = values[
k*stride+
index] + (p_face - values[
k*stride+
index]) * d2aLim / d2a;
354 fv_l = values[
k*stride+
index] + (m_face - values[
k*stride+
index]) * d2aLim / d2a;
376 printf(
"Order %d has not been implemented (yet)\n",order);
380 Realf slope_abs,slope_sign;
396 if (((fv_r - values[
k*stride+
index]) * (values[
k*stride+
index] - fv_l) <= 0.0)
397 && ((values[(
k-1)*stride+
index] - values[
k*stride+
index]) * (values[
k*stride+
index] - values[(
k+1)*stride+
index]) <= 0.0)) {
405 bool filter = (values[(
k-1)*stride+
index] - fv_l) * (fv_l - values[
k*stride+
index]) < 0 ;
408 fv_l=values[
k*stride+
index] - slope_sign * 0.5 * slope_abs;
412 filter = (values[(
k+1)*stride+
index] - fv_r) * (fv_r - values[
k*stride+
index]) < 0;
415 fv_r=values[
k*stride+
index] + slope_sign * 0.5 * slope_abs;
__global__ void vmesh::VelocityMesh **__restrict__ ColumnOffsets split::SplitVector< vmesh::GlobalID > Hashinator::Hashmap< vmesh::GlobalID, vmesh::LocalID > const uint *__restrict__ const Realf const int const int const Realf const Realf dv
ARCH_DEV void compute_h6_left_face_value(const Realf *const values, int k, Realf &fv_l, const int index, const int stride)
ARCH_DEV void compute_h5_face_values(const Realf *const values, int k, Realf &fv_l, Realf &fv_r, const int index, const int stride)
ARCH_DEV void compute_filtered_face_values_nonuniform(const Realf *const dv, const Realf *const values, int k, face_estimate_order order, Realf &fv_l, Realf &fv_r, const Realf threshold, const int index, const int stride)
ARCH_DEV Realf get_D2aLim(const Realf *h, const Realf *values, int k, const Realf C, Realf &fv, const int index, const int stride)
ARCH_DEV void compute_h7_left_face_derivative(const Realf *const values, int k, Realf &fd_l, const int index, const int stride)
ARCH_DEV void compute_h5_left_face_derivative(const Realf *const values, int k, Realf &fd_l, const int index, const int stride)
ARCH_DEV void compute_filtered_face_values_nonuniform_conserving(const Realf *const dv, const Realf *const values, int k, face_estimate_order order, Realf &fv_l, Realf &fv_r, const Realf threshold, const int index, const int stride)
ARCH_DEV void compute_h4_left_face_value_nonuniform(const Realf *const h, const Realf *const u, int k, Realf &fv_l, const int index, const int stride)
ARCH_DEV void compute_h4_left_face_derivative(const Realf *const values, int k, Realf &fd_l, const int index, const int stride)
ARCH_DEV void constrain_face_values(const Realf *h, const Realf *values, int k, Realf &fv_l, Realf &fv_r, const int index, const int stride)
ARCH_DEV void compute_filtered_face_values_derivatives(const Realf *const values, int k, face_estimate_order order, Realf &fv_l, Realf &fv_r, Realf &fd_l, Realf &fd_r, const Realf threshold, const int index, const int stride)
ARCH_DEV void compute_h3_left_face_derivative(const Realf *const values, int k, Realf &fv_l, const int index, const int stride)
ARCH_DEV void compute_h8_left_face_value(const Realf *const values, int k, Realf &fv_l, const int index, const int stride)
ARCH_DEV void compute_h4_left_face_value(const Realf *const values, int k, Realf &fv_l, const int index, const int stride)
ARCH_DEV void compute_filtered_face_values(const Realf *const values, int k, face_estimate_order order, Realf &fv_l, Realf &fv_r, const Realf threshold, const int index, const int stride)
__global__ void const Realf const uint *__restrict__ const uint *__restrict__ const vmesh::GlobalID *__restrict__ const uint const uint const uint const Realf threshold
Real slope_limiter(const Real &l, const Real &m, const Real &r)
static ARCH_HOSTDEV VecSimple< T > min(VecSimple< T > const &l, VecSimple< T > const &r)
static ARCH_HOSTDEV VecSimple< T > abs(const VecSimple< T > &l)