From b64bea75e939f91ef03280dae418f826497ca97e Mon Sep 17 00:00:00 2001 From: Cristian C Lalescu <Cristian.Lalescu@ds.mpg.de> Date: Mon, 8 Feb 2016 13:46:42 +0100 Subject: [PATCH] new interpolator file compiles --- bfps/cpp/interpolator.cpp | 78 +++++++++++++++++++-------------------- setup.py | 2 +- 2 files changed, 40 insertions(+), 40 deletions(-) diff --git a/bfps/cpp/interpolator.cpp b/bfps/cpp/interpolator.cpp index 43e91339..1082ca70 100644 --- a/bfps/cpp/interpolator.cpp +++ b/bfps/cpp/interpolator.cpp @@ -131,13 +131,42 @@ int interpolator<rnumber, interp_neighbours>::read_rFFTW(void *void_src) return EXIT_SUCCESS; } +template <class rnumber, int interp_neighbours> +void interpolator<rnumber, interp_neighbours>::sample( + const int nparticles, + const int pdimension, + const double *__restrict__ x, + double *__restrict__ y, + const int *deriv) +{ + /* get grid coordinates */ + int *xg = new int[3*nparticles]; + double *xx = new double[3*nparticles]; + double *yy = new double[3*nparticles]; + std::fill_n(yy, 3*nparticles, 0.0); + this->get_grid_coordinates(nparticles, pdimension, x, xg, xx); + /* perform interpolation */ + for (int p=0; p<nparticles; p++) + if (this->descriptor->rank[MOD(xg[p*3+2], this->descriptor->sizes[0])] == this->descriptor->myrank) + this->operator()(xg + p*3, xx + p*3, yy + p*3, deriv); + MPI_Allreduce( + yy, + y, + 3*nparticles, + MPI_DOUBLE, + MPI_SUM, + this->descriptor->comm); + delete[] yy; + delete[] xg; + delete[] xx; +} + template <class rnumber, int interp_neighbours> void interpolator<rnumber, interp_neighbours>::operator()( - double t, - int *xg, - double *xx, + const int *xg, + const double *xx, double *dest, - int *deriv) + const int *deriv) { double bx[interp_neighbours*2+2], by[interp_neighbours*2+2], bz[interp_neighbours*2+2]; if (deriv == NULL) @@ -154,58 +183,29 @@ void interpolator<rnumber, interp_neighbours>::operator()( } std::fill_n(dest, 3, 0); ptrdiff_t bigiz, bigiy, bigix; - double tval[3]; for (int iz = -interp_neighbours; iz <= interp_neighbours+1; iz++) { bigiz = ptrdiff_t(xg[2]+iz); - std::fill_n(tval, 3, 0); for (int iy = -interp_neighbours; iy <= interp_neighbours+1; iy++) { bigiy = ptrdiff_t(MOD(xg[1]+iy, this->buffered_descriptor->sizes[1])); for (int ix = -interp_neighbours; ix <= interp_neighbours+1; ix++) { bigix = ptrdiff_t(MOD(xg[0]+ix, this->buffered_descriptor->sizes[2])); + ptrdiff_t tindex = ((bigiz *this->buffered_descriptor->sizes[1] + + bigiy)*this->buffered_descriptor->sizes[2] + + bigix)*3 + this->buffer_size; for (int c=0; c<3; c++) { - ptrdiff_t tindex = ((bigiz *this->buffered_descriptor->sizes[1] + - bigiy)*this->buffered_descriptor->sizes[2] + - bigix)*3+c + this->buffer_size; - dest[c] += (this->f0[tindex]*(1-t) + t*this->f1[tindex])*(bz[iz+interp_neighbours]* - by[iy+interp_neighbours]* - bx[ix+interp_neighbours]); - tval[c] += (this->f0[tindex]*(1-t) + t*this->f1[tindex])*(bz[iz+interp_neighbours]* - by[iy+interp_neighbours]* - bx[ix+interp_neighbours]); + dest[c] += this->field[tindex+c]*(bz[iz+interp_neighbours]* + by[iy+interp_neighbours]* + bx[ix+interp_neighbours]); } } } - DEBUG_MSG("%ld %d %d %g %g %g\n", bigiz, xg[1], xg[0], tval[0], tval[1], tval[2]); } } -template <class rnumber, int interp_neighbours> -void interpolator<rnumber, interp_neighbours>::sample( - const int nparticles, - const int pdimension, - const double *__restrict__ x, - double *__restrict__ y, - const int *deriv) -{ - /* get grid coordinates */ - int *xg = new int[3*nparticles]; - double *xx = new double[3*nparticles]; - double *yy = new double[3*nparticles]; - std::fill_n(yy, 3*nparticles, 0.0); - this->get_grid_coordinates(nparticles, pdimension, x, xg, xx); - /* perform interpolation */ - for (int p=0; p<nparticles; p++) - if (this->descriptor->zrank[MOD(xg[p*3+2], this->descriptor->sizes[0])] == this->descriptor->myrank) - this->operator()(xg + p*3, xx + p*3, yy + p*3, deriv); - delete[] yy; - delete[] xg; - delete[] xx; -} - template class interpolator<float, 1>; template class interpolator<float, 2>; template class interpolator<float, 3>; diff --git a/setup.py b/setup.py index 77e60082..cda297d7 100644 --- a/setup.py +++ b/setup.py @@ -95,7 +95,7 @@ src_file_list = ['field_descriptor', 'interpolator_base', 'rFFTW_interpolator', 'rFFTW_particles', - #'interpolator', + 'interpolator', #'particles', 'fftw_tools', 'spline_n1', -- GitLab