diff --git a/src/remap_vars.cc b/src/remap_vars.cc index 2f65cbf8d249024b781c4a2f092987bbaa5a3732..a5dfdbedf0a32d6ae6dee0336b932498ebf06279 100644 --- a/src/remap_vars.cc +++ b/src/remap_vars.cc @@ -1,4 +1,5 @@ #include "cdo_int.h" +#include "cdo_wtime.h" #include "cdoOptions.h" #include "remap_vars.h" #include "timer.h" @@ -50,6 +51,8 @@ remap(double *restrict dst_array, double missval, size_t dst_size, const RemapVa extern int timer_remap; + double start = cdoVerbose ? cdo_get_wtime() : 0; + // Check the order of the interpolation int iorder = (src_grad1 == NULL) ? 1 : 2; @@ -93,14 +96,24 @@ remap(double *restrict dst_array, double missval, size_t dst_size, const RemapVa { size_t nlinks = num_links / lpv; - if (lpv == 4) + if (lpv == 1) { #ifdef _OPENMP -#pragma omp parallel for default(none) shared(dst_array, src_array, dst_add, src_add, map_wts, num_wts, nlinks, lpv) +#pragma omp parallel for default(none) shared(dst_array, src_array, dst_add, src_add, map_wts, nlinks) #endif for (size_t n = 0; n < nlinks; ++n) { - size_t noff = n * lpv; + dst_array[dst_add[n]] = src_array[src_add[n]] * map_wts[n]; + } + } + else if (lpv == 4) + { +#ifdef _OPENMP +#pragma omp parallel for default(none) shared(dst_array, src_array, dst_add, src_add, map_wts, num_wts, nlinks) +#endif + for (size_t n = 0; n < nlinks; ++n) + { + size_t noff = n * 4; dst_array[dst_add[noff]] = src_array[src_add[noff]] * map_wts[num_wts * (noff)] + src_array[src_add[noff + 1]] * map_wts[num_wts * (noff + 1)] + src_array[src_add[noff + 2]] * map_wts[num_wts * (noff + 2)] @@ -161,6 +174,8 @@ remap(double *restrict dst_array, double missval, size_t dst_size, const RemapVa } } + if (cdoVerbose) cdoPrint("Remap: %.2f seconds", cdo_get_wtime() - start); + if (cdoTimer) timer_stop(timer_remap); }