diff options
Diffstat (limited to 'Carpet/CarpetLib/src/dist.cc')
-rw-r--r-- | Carpet/CarpetLib/src/dist.cc | 71 |
1 files changed, 20 insertions, 51 deletions
diff --git a/Carpet/CarpetLib/src/dist.cc b/Carpet/CarpetLib/src/dist.cc index 49b73a078..8546ca6ca 100644 --- a/Carpet/CarpetLib/src/dist.cc +++ b/Carpet/CarpetLib/src/dist.cc @@ -63,16 +63,16 @@ namespace dist { #define CARPET_NO_COMPLEX #include "typecase.hh" #undef TYPECASE -#define TYPECASE(N,T) \ - if (datatype == mpi_datatype<T>()) { \ - assert(not done); \ - done = true; \ - T *restrict const invec = (T*)invec_; \ - T *restrict const inoutvec = (T*)inoutvec_; \ - for (int n=0; n<len; ++n) { \ - inoutvec[n].Re = max(inoutvec[n].Re, invec[n].Re); \ - inoutvec[n].Im = max(inoutvec[n].Im, invec[n].Im); \ - } \ +#define TYPECASE(N,T) \ + if (datatype == mpi_datatype<T>()) { \ + assert(not done); \ + done = true; \ + T *restrict const invec = (T*)invec_; \ + T *restrict const inoutvec = (T*)inoutvec_; \ + for (int n=0; n<len; ++n) { \ + inoutvec[n] = T(max(real(inoutvec[n]), real(invec[n])), \ + max(imag(inoutvec[n]), imag(invec[n]))); \ + } \ } #define CARPET_COMPLEX #include "typecase.hh" @@ -101,16 +101,16 @@ namespace dist { #define CARPET_NO_COMPLEX #include "typecase.hh" #undef TYPECASE -#define TYPECASE(N,T) \ - if (datatype == mpi_datatype<T>()) { \ - assert(not done); \ - done = true; \ - T *restrict const invec = (T*)invec_; \ - T *restrict const inoutvec = (T*)inoutvec_; \ - for (int n=0; n<len; ++n) { \ - inoutvec[n].Re = min(inoutvec[n].Re, invec[n].Re); \ - inoutvec[n].Im = min(inoutvec[n].Im, invec[n].Im); \ - } \ +#define TYPECASE(N,T) \ + if (datatype == mpi_datatype<T>()) { \ + assert(not done); \ + done = true; \ + T *restrict const invec = (T*)invec_; \ + T *restrict const inoutvec = (T*)inoutvec_; \ + for (int n=0; n<len; ++n) { \ + inoutvec[n] = T(min(real(inoutvec[n]), real(invec[n])), \ + min(imag(inoutvec[n]), imag(invec[n]))); \ + } \ } #define CARPET_COMPLEX #include "typecase.hh" @@ -136,22 +136,6 @@ namespace dist { inoutvec[n] *= invec[n]; \ } \ } -#define CARPET_NO_COMPLEX -#include "typecase.hh" -#undef TYPECASE -#define TYPECASE(N,T) \ - if (datatype == mpi_datatype<T>()) { \ - assert(not done); \ - done = true; \ - T *restrict const invec = (T*)invec_; \ - T *restrict const inoutvec = (T*)inoutvec_; \ - for (int n=0; n<len; ++n) { \ - complex<T>& inout = *(complex<T>*)&inoutvec[n]; \ - complex<T>& in = *(complex<T>*)&invec[n]; \ - inout *= in; \ - } \ - } -#define CARPET_COMPLEX #include "typecase.hh" #undef TYPECASE assert(done); @@ -175,21 +159,6 @@ namespace dist { inoutvec[n] += invec[n]; \ } \ } -#define CARPET_NO_COMPLEX -#include "typecase.hh" -#undef TYPECASE -#define TYPECASE(N,T) \ - if (datatype == mpi_datatype<T>()) { \ - assert(not done); \ - done = true; \ - T *restrict const invec = (T*)invec_; \ - T *restrict const inoutvec = (T*)inoutvec_; \ - for (int n=0; n<len; ++n) { \ - inoutvec[n].Re += invec[n].Re; \ - inoutvec[n].Im += invec[n].Im; \ - } \ - } -#define CARPET_COMPLEX #include "typecase.hh" #undef TYPECASE assert(done); |