diff options
Diffstat (limited to 'Carpet/CarpetLib/src/prolongate_3d_cc_eno_rf2.cc')
-rw-r--r-- | Carpet/CarpetLib/src/prolongate_3d_cc_eno_rf2.cc | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/Carpet/CarpetLib/src/prolongate_3d_cc_eno_rf2.cc b/Carpet/CarpetLib/src/prolongate_3d_cc_eno_rf2.cc index 320635fd4..05aaad6ae 100644 --- a/Carpet/CarpetLib/src/prolongate_3d_cc_eno_rf2.cc +++ b/Carpet/CarpetLib/src/prolongate_3d_cc_eno_rf2.cc @@ -1,6 +1,8 @@ #include <cctk.h> #include <cctk_Parameters.h> +#include <loopcontrol.h> + #include <algorithm> #include <cassert> #include <cmath> @@ -966,6 +968,7 @@ namespace CarpetLib { ibbox3 const & restrict regbbox, void * extraargs) { + DECLARE_CCTK_PARAMETERS; assert (not extraargs); static_assert (ORDER>=0, "ORDER must be non-negative"); @@ -1091,6 +1094,8 @@ namespace CarpetLib { + if (not use_loopcontrol_in_operators) { + // Loop over fine region // Label scheme: l 8 fk fj fi @@ -1284,9 +1289,86 @@ namespace CarpetLib { // end k loop l9:; + + + + } else { // use_loopcontrol_in_operators + // Loop over fine region +#pragma omp parallel + CCTK_LOOP3(prolongate_3d_cc_eno_rf2, + i,j,k, 0,0,0, regiext,regjext,regkext, + dstipadext,dstjpadext,dstkpadext) + { + const ptrdiff_t is = (srcioff + i) / 2; + const ptrdiff_t js = (srcjoff + j) / 2; + const ptrdiff_t ks = (srckoff + k) / 2; + const ptrdiff_t im = (srcioff + i) % 2; + const ptrdiff_t jm = (srcjoff + j) % 2; + const ptrdiff_t km = (srckoff + k) % 2; + const ptrdiff_t id = dstioff + i; + const ptrdiff_t jd = dstjoff + j; + const ptrdiff_t kd = dstkoff + k; + if (km == 0) { + if (jm == 0) { + if (im == 0) { + check_indices3<T,ORDER,0,0,0> (is,js,ks, srciext, srcjext, srckext); + dst[DSTIND3(id,jd,kd)] = + interp3<T,ORDER,0,0,0> + (& src[SRCIND3(is,js,ks)], srcdi, srcdj, srcdk); + } else { + check_indices3<T,ORDER,1,0,0> (is,js,ks, srciext, srcjext, srckext); + dst[DSTIND3(id,jd,kd)] = + interp3<T,ORDER,1,0,0> + (& src[SRCIND3(is,js,ks)], srcdi, srcdj, srcdk); + } + } else { + if (im == 0) { + check_indices3<T,ORDER,0,1,0> (is,js,ks, srciext, srcjext, srckext); + dst[DSTIND3(id,jd,kd)] = + interp3<T,ORDER,0,1,0> + (& src[SRCIND3(is,js,ks)], srcdi, srcdj, srcdk); + } else { + check_indices3<T,ORDER,1,1,0> (is,js,ks, srciext, srcjext, srckext); + dst[DSTIND3(id,jd,kd)] = + interp3<T,ORDER,1,1,0> + (& src[SRCIND3(is,js,ks)], srcdi, srcdj, srcdk); + } + } + } else { + if (jm == 0) { + if (im == 0) { + check_indices3<T,ORDER,0,0,1> (is,js,ks, srciext, srcjext, srckext); + dst[DSTIND3(id,jd,kd)] = + interp3<T,ORDER,0,0,1> + (& src[SRCIND3(is,js,ks)], srcdi, srcdj, srcdk); + } else { + check_indices3<T,ORDER,1,0,1> (is,js,ks, srciext, srcjext, srckext); + dst[DSTIND3(id,jd,kd)] = + interp3<T,ORDER,1,0,1> + (& src[SRCIND3(is,js,ks)], srcdi, srcdj, srcdk); + } + } else { + if (im == 0) { + check_indices3<T,ORDER,0,1,1> (is,js,ks, srciext, srcjext, srckext); + dst[DSTIND3(id,jd,kd)] = + interp3<T,ORDER,0,1,1> + (& src[SRCIND3(is,js,ks)], srcdi, srcdj, srcdk); + } else { + check_indices3<T,ORDER,1,1,1> (is,js,ks, srciext, srcjext, srckext); + dst[DSTIND3(id,jd,kd)] = + interp3<T,ORDER,1,1,1> + (& src[SRCIND3(is,js,ks)], srcdi, srcdj, srcdk); + } + } + } + } CCTK_ENDLOOP3(prolongate_3d_cc_eno_rf2); + + } // if use_loopcontrol_in_operators + } + // Specialise for complex types |