Skip to content
Snippets Groups Projects
Commit 7c9515da authored by Uwe Schulzweida's avatar Uwe Schulzweida
Browse files

varray_sum_mv: added OpenMP pragma.

parent 734245be
No related branches found
No related tags found
No related merge requests found
......@@ -582,6 +582,14 @@ template <typename T>
double
varray_sum_mv(const size_t len, const Varray<T> &v, const T missval)
{
auto f_sum_mv = [](const auto a, const auto mv_a, auto &sum, auto &nvals, auto is_EQ) {
if (!is_EQ(a, mv_a))
{
sum += a;
nvals++;
}
};
assert(len > 0);
assert(v.size() > 0);
assert(len <= v.size());
......@@ -591,21 +599,17 @@ varray_sum_mv(const size_t len, const Varray<T> &v, const T missval)
if (std::isnan(missval))
{
for (size_t i = 0; i < len; ++i)
if (!DBL_IS_EQUAL(v[i], missval))
{
sum += v[i];
nvals++;
}
#ifdef HAVE_OPENMP4
#pragma omp parallel for default(shared) schedule(static) reduction(+ : sum,nvals)
#endif
for (size_t i = 0; i < len; ++i) f_sum_mv(v[i], missval, sum, nvals, dbl_is_equal);
}
else
{
for (size_t i = 0; i < len; ++i)
if (IS_NOT_EQUAL(v[i], missval))
{
sum += v[i];
nvals++;
}
#ifdef HAVE_OPENMP4
#pragma omp parallel for default(shared) schedule(static) reduction(+ : sum,nvals)
#endif
for (size_t i = 0; i < len; ++i) f_sum_mv(v[i], missval, sum, nvals, is_equal);
}
if (!nvals) sum = missval;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment