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

Added function field_operation()

parent 29aba1c3
No related branches found
No related tags found
1 merge request!229M214003/develop
......@@ -124,13 +124,24 @@ diff(size_t n, const Field &field1, const Field &field2)
return diffParam;
}
static void
use_real_part(size_t gridsize, Field &field)
template <typename FUNC, typename FIELD, typename... ARGS>
inline auto
field_operation(FUNC func, FIELD &field, ARGS &...args) -> decltype(func(field.vec_f, args...))
{
if (field.memType == MemType::Float)
for (size_t i = 0; i < gridsize; ++i) field.vec_f[i] = field.vec_f[i * 2];
return func(field.vec_f, args...);
else
for (size_t i = 0; i < gridsize; ++i) field.vec_d[i] = field.vec_d[i * 2];
return func(field.vec_d, args...);
}
static void
use_real_part(Field &field)
{
auto func = [](auto &v) {
auto n = v.size() / 2;
for (size_t i = 0; i < n; ++i) v[i] = v[i * 2];
};
return field_operation(func, field);
}
struct DiffParam
......@@ -385,11 +396,11 @@ public:
field1.init(var1);
cdo_read_record(streamID1, field1);
if (var1.nwpv == CDI_COMP) use_real_part(var1.gridsize, field1);
if (var1.nwpv == CDI_COMP) use_real_part(field1);
field2.init(var2);
cdo_read_record(streamID2, field2);
if (var2.nwpv == CDI_COMP) use_real_part(var1.gridsize, field2);
if (var2.nwpv == CDI_COMP) use_real_part(field2);
if (runAsync && numSets > 0)
{
......
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