summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoreschnett <eschnett@17b73243-c579-4c4c-a9d2-2d5706c11dac>2013-01-17 20:55:53 +0000
committereschnett <eschnett@17b73243-c579-4c4c-a9d2-2d5706c11dac>2013-01-17 20:55:53 +0000
commitd3a8f469b7295c6833ae8ec62014e6c3f6f1b83e (patch)
tree18725772bb72a2c4f742b5bc568653259c1dc330 /src
parent4440072ca2acc19a2f4eb4f1cb82613356e88d62 (diff)
Clean up namespace for vectorised loops
Add two new arguments (imin and imax) to vectorised loops, which are variable names that will be set to the desired loop bounds by the looping macros. git-svn-id: http://svn.cactuscode.org/flesh/trunk@4937 17b73243-c579-4c4c-a9d2-2d5706c11dac
Diffstat (limited to 'src')
-rw-r--r--src/include/cctk_Loop.h724
-rwxr-xr-xsrc/include/cctk_Loop.h.pl193
2 files changed, 505 insertions, 412 deletions
diff --git a/src/include/cctk_Loop.h b/src/include/cctk_Loop.h
index 66124e6e..8af15eab 100644
--- a/src/include/cctk_Loop.h
+++ b/src/include/cctk_Loop.h
@@ -35,7 +35,7 @@
(imin), \
(imax), \
(iash), \
- 1) \
+ cctki0_imin_,cctki0_imax_, 1) \
#define CCTK_ENDLOOP1_NORMAL(name) \
CCTK_ENDLOOP1STR_NORMAL(name) \
@@ -44,19 +44,21 @@
i, \
ni, \
idir, \
- imin, \
- imax, \
+ imin_, \
+ imax_, \
iash, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki0_loop1_normal_##name; \
int const cctki0_idir = (idir); \
- int const cctki0_imin = (imin); \
- int const cctki0_imax = (imax); \
- int const cctki0_istr CCTK_ATTRIBUTE_UNUSED = (istr); \
- assert(cctki0_istr == 1); \
+ int const cctki0_imin = (imin_); \
+ int const cctki0_imax = (imax_); \
+ int const cctki0_iash = (iash); \
+ int const cctki0_istr = (istr); \
+ int const imin = cctki0_imin; \
+ int const imax = cctki0_imax; \
_Pragma("omp for") \
- for (int i=cctki0_imin; i<cctki0_imax; ++i) { \
+ for (int i=cctki0_imin - (imin) % cctki0_istr; i<cctki0_imax; i+=cctki0_istr) { \
int const ni CCTK_ATTRIBUTE_UNUSED = cctki0_idir<0 ? i+1 : cctki0_idir==0 ? 0 : cctki0_imax-i; \
{ \
@@ -78,25 +80,25 @@
(imin), \
(imax), \
(iash), \
- 1) \
+ cctki1_imin_,cctki1_imax_, 1) \
#define CCTK_ENDLOOP1(name) \
CCTK_ENDLOOP1STR(name) \
#define CCTK_LOOP1STR(name, \
i, \
- imin, \
- imax, \
+ imin_, \
+ imax_, \
iash, \
- istr) \
+ imin,imax, istr) \
CCTK_LOOP1STR_NORMAL(name, \
i, \
cctki1_ni, \
0, \
- imin, \
- imax, \
+ imin_, \
+ imax_, \
iash, \
- istr) \
+ imin,imax, istr) \
#define CCTK_ENDLOOP1STR(name) \
CCTK_ENDLOOP1STR_NORMAL(name) \
@@ -113,7 +115,7 @@
i, \
(iblo), \
(ibhi), \
- 1) \
+ cctki2_imin_,cctki2_imax_, 1) \
#define CCTK_ENDLOOP1_INTERIOR(name) \
CCTK_ENDLOOP1STR_INTERIOR(name) \
@@ -122,7 +124,7 @@
i, \
iblo, \
ibhi, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki2_loop1_interior_##name; \
cGH const *restrict const cctki2_cctkGH = (cctkGH); \
@@ -136,7 +138,7 @@
(iblo), \
cctki2_cctkGH->cctk_lsh[0]-(ibhi), \
cctki2_cctkGH->cctk_ash[0], \
- (istr)) { \
+ imin,imax, (istr)) { \
#define CCTK_ENDLOOP1STR_INTERIOR(name) \
} CCTK_ENDLOOP1STR(name##_interior); \
@@ -161,7 +163,7 @@
(ibhi), \
(ibboxlo), \
(ibboxhi), \
- 1) \
+ cctki2_imin_,cctki2_imax_, 1) \
#define CCTK_ENDLOOP1_BOUNDARIES(name) \
CCTK_ENDLOOP1STR_BOUNDARIES(name) \
@@ -173,7 +175,7 @@
ibhi, \
ibboxlo, \
ibboxhi, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki2_loop1_boundaries_##name; \
cGH const *restrict const cctki2_cctkGH = (cctkGH); \
@@ -187,7 +189,6 @@
int const cctki2_bbox[] = { (ibboxlo), (ibboxhi) }; \
int const cctki2_lsh[] = { cctki2_cctkGH->cctk_lsh[0] }; \
int const cctki2_istr CCTK_ATTRIBUTE_UNUSED = (istr); \
- /* Loop over all faces, edges, and corners */ \
for (int cctki2_idir=-1; cctki2_idir<=+1; ++cctki2_idir) { \
int cctki2_any_bbox = \
(cctki2_idir==-1 ? cctki2_bbox[0] : 0) || (cctki2_idir==+1 ? cctki2_bbox[1] : 0); \
@@ -205,7 +206,7 @@
cctki2_bmin[0], \
cctki2_bmax[0], \
cctki2_cctkGH->cctk_ash[0], \
- cctki2_istr) { \
+ imin,imax, cctki2_istr) { \
#define CCTK_ENDLOOP1STR_BOUNDARIES(name) \
} CCTK_ENDLOOP1STR_NORMAL(name##_boundaries); \
@@ -232,7 +233,7 @@
(ibhi), \
(ibboxlo), \
(ibboxhi), \
- 1) \
+ cctki2_imin_,cctki2_imax_, 1) \
#define CCTK_ENDLOOP1_INTBOUNDARIES(name) \
CCTK_ENDLOOP1STR_INTBOUNDARIES(name) \
@@ -244,7 +245,7 @@
ibhi, \
ibboxlo, \
ibboxhi, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki2_loop1_intboundaries_##name; \
cGH const *restrict const cctki2_cctkGH = (cctkGH); \
@@ -258,7 +259,6 @@
int const cctki2_bbox[] = { (ibboxlo), (ibboxhi) }; \
int const cctki2_lsh[] = { cctki2_cctkGH->cctk_lsh[0] }; \
int const cctki2_istr CCTK_ATTRIBUTE_UNUSED = (istr); \
- /* Loop over all faces, edges, and corners */ \
for (int cctki2_idir=-1; cctki2_idir<=+1; ++cctki2_idir) { \
int cctki2_any_bbox = \
(cctki2_idir==-1 ? cctki2_bbox[0] : 0) || (cctki2_idir==+1 ? cctki2_bbox[1] : 0); \
@@ -278,7 +278,7 @@
cctki2_bmin[0], \
cctki2_bmax[0], \
cctki2_cctkGH->cctk_ash[0], \
- cctki2_istr) { \
+ imin,imax, cctki2_istr) { \
#define CCTK_ENDLOOP1STR_INTBOUNDARIES(name) \
} CCTK_ENDLOOP1STR_NORMAL(name##_intboundaries); \
@@ -295,14 +295,14 @@
i) \
CCTK_LOOP1STR_ALL(name, (cctkGH), \
i, \
- 1) \
+ cctki3_imin_,cctki3_imax_, 1) \
#define CCTK_ENDLOOP1_ALL(name) \
CCTK_ENDLOOP1STR_ALL(name) \
#define CCTK_LOOP1STR_ALL(name, cctkGH, \
i, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki3_loop1_all_##name; \
cGH const *restrict const cctki3_cctkGH = (cctkGH); \
@@ -316,7 +316,7 @@
0, \
cctki3_cctkGH->cctk_lsh[0], \
cctki3_cctkGH->cctk_ash[0], \
- (istr)) { \
+ imin,imax, (istr)) { \
#define CCTK_ENDLOOP1STR_ALL(name) \
} CCTK_ENDLOOP1STR(name##_all); \
@@ -331,14 +331,14 @@
i) \
CCTK_LOOP1STR_INT(name, (cctkGH), \
i, \
- 1) \
+ cctki3_imin_,cctki3_imax_, 1) \
#define CCTK_ENDLOOP1_INT(name) \
CCTK_ENDLOOP1STR_INT(name) \
#define CCTK_LOOP1STR_INT(name, cctkGH, \
i, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki3_loop1_int_##name; \
cGH const *restrict const cctki3_cctkGH = (cctkGH); \
@@ -359,7 +359,7 @@
i, \
cctki3_bndsize[0], \
cctki3_bndsize[1], \
- (istr)) { \
+ imin,imax, (istr)) { \
#define CCTK_ENDLOOP1STR_INT(name) \
} CCTK_ENDLOOP1STR_INTERIOR(name##_int); \
@@ -376,7 +376,7 @@
CCTK_LOOP1STR_BND(name, (cctkGH), \
i, \
ni, \
- 1) \
+ cctki3_imin_,cctki3_imax_, 1) \
#define CCTK_ENDLOOP1_BND(name) \
CCTK_ENDLOOP1STR_BND(name) \
@@ -384,7 +384,7 @@
#define CCTK_LOOP1STR_BND(name, cctkGH, \
i, \
ni, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki3_loop1_bnd_##name; \
cGH const *restrict const cctki3_cctkGH = (cctkGH); \
@@ -408,7 +408,7 @@
cctki3_bndsize[1], \
cctki3_is_physbnd[0], \
cctki3_is_physbnd[1], \
- (istr)) { \
+ imin,imax, (istr)) { \
#define CCTK_ENDLOOP1STR_BND(name) \
} CCTK_ENDLOOP1STR_BOUNDARIES(name##_bnd); \
@@ -425,7 +425,7 @@
CCTK_LOOP1STR_INTBND(name, (cctkGH), \
i, \
ni, \
- 1) \
+ cctki3_imin_,cctki3_imax_, 1) \
#define CCTK_ENDLOOP1_INTBND(name) \
CCTK_ENDLOOP1STR_INTBND(name) \
@@ -433,7 +433,7 @@
#define CCTK_LOOP1STR_INTBND(name, cctkGH, \
i, \
ni, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki3_loop1_intbnd_##name; \
cGH const *restrict const cctki3_cctkGH = (cctkGH); \
@@ -457,7 +457,7 @@
cctki3_bndsize[1], \
cctki3_is_physbnd[0], \
cctki3_is_physbnd[1], \
- (istr)) { \
+ imin,imax, (istr)) { \
#define CCTK_ENDLOOP1STR_INTBND(name) \
} CCTK_ENDLOOP1STR_INTBOUNDARIES(name##_intbnd); \
@@ -474,6 +474,7 @@
#define CCTK_LOOP1_NORMAL_DECLARE(name) \
CCTK_LOOP1STR_NORMAL_DECLARE(name) \
+ && integer :: name/**/0_imin_, name/**/0_imax_ \
#define CCTK_LOOP1_NORMAL_OMP_PRIVATE(name) \
CCTK_LOOP1STR_NORMAL_OMP_PRIVATE(name) \
@@ -492,7 +493,7 @@
imin, \
imax, \
iash, \
- 1) \
+ name/**/0_imin_,name/**/0_imax_, 1) \
#define CCTK_ENDLOOP1_NORMAL(name) \
CCTK_ENDLOOP1STR_NORMAL(name) \
@@ -501,6 +502,7 @@
&& integer :: name/**/0_idir \
&& integer :: name/**/0_imin \
&& integer :: name/**/0_imax \
+ && integer :: name/**/0_iash \
&& integer :: name/**/0_istr \
#define CCTK_LOOP1STR_NORMAL_OMP_PRIVATE(name) \
@@ -511,16 +513,19 @@
i, \
ni, \
idir, \
- imin, \
- imax, \
+ imin_, \
+ imax_, \
iash, \
- istr) \
+ imin,imax, istr) \
&& name/**/0_idir = idir \
- && name/**/0_imin = imin \
- && name/**/0_imax = imax \
+ && name/**/0_imin = imin_ \
+ && name/**/0_imax = imax_ \
+ && name/**/0_iash = iash \
&& name/**/0_istr = istr \
+ && imin = name/**/0_imin \
+ && imax = name/**/0_imax \
&& !$omp do \
- && do i = name/**/0_imin, name/**/0_imax \
+ && do i = name/**/0_imin - modulo((imin), name/**/0_istr), name/**/0_imax \
&& if (name/**/0_idir< 0) ni = i \
&& if (name/**/0_idir==0) ni = 0 \
&& if (name/**/0_idir> 0) ni = name/**/0_imax+1-i \
@@ -532,6 +537,7 @@
#define CCTK_LOOP1_DECLARE(name) \
CCTK_LOOP1STR_DECLARE(name) \
+ && integer :: name/**/1_imin_, name/**/1_imax_ \
#define CCTK_LOOP1_OMP_PRIVATE(name) \
CCTK_LOOP1STR_OMP_PRIVATE(name) \
@@ -546,7 +552,7 @@
imin, \
imax, \
iash, \
- 1) \
+ name/**/1_imin_,name/**/1_imax_, 1) \
#define CCTK_ENDLOOP1(name) \
CCTK_ENDLOOP1STR(name) \
@@ -560,18 +566,18 @@
#define CCTK_LOOP1STR(name, \
i, \
- imin, \
- imax, \
+ imin_, \
+ imax_, \
iash, \
- istr) \
+ imin,imax, istr) \
CCTK_LOOP1STR_NORMAL(name, \
i, \
name/**/1_ni, \
0, \
- imin, \
- imax, \
+ imin_, \
+ imax_, \
iash, \
- istr) \
+ imin,imax, istr) \
#define CCTK_ENDLOOP1STR(name) \
CCTK_ENDLOOP1STR_NORMAL(name) \
@@ -582,6 +588,7 @@
#define CCTK_LOOP1_INTERIOR_DECLARE(name) \
CCTK_LOOP1STR_INTERIOR_DECLARE(name) \
+ && integer :: name/**/2_imin_, name/**/2_imax_ \
#define CCTK_LOOP1_INTERIOR_OMP_PRIVATE(name) \
CCTK_LOOP1STR_INTERIOR_OMP_PRIVATE(name) \
@@ -594,7 +601,7 @@
i, \
iblo, \
ibhi, \
- 1) \
+ name/**/2_imin_,name/**/2_imax_, 1) \
#define CCTK_ENDLOOP1_INTERIOR(name) \
CCTK_ENDLOOP1STR_INTERIOR(name) \
@@ -609,13 +616,13 @@
i, \
iblo, \
ibhi, \
- istr) \
+ imin,imax, istr) \
CCTK_LOOP1STR(name/**/_interior, \
i, \
(iblo)+1, \
cctk_lsh(1)-(ibhi), \
cctk_ash(1), \
- istr) \
+ imin,imax, istr) \
#define CCTK_ENDLOOP1STR_INTERIOR(name) \
CCTK_ENDLOOP1STR(name/**/_interior) \
@@ -626,6 +633,7 @@
#define CCTK_LOOP1_BOUNDARIES_DECLARE(name) \
CCTK_LOOP1STR_BOUNDARIES_DECLARE(name) \
+ && integer :: name/**/2_imin_, name/**/2_imax_ \
#define CCTK_LOOP1_BOUNDARIES_OMP_PRIVATE(name) \
CCTK_LOOP1STR_BOUNDARIES_OMP_PRIVATE(name) \
@@ -644,7 +652,7 @@
ibhi, \
ibboxlo, \
ibboxhi, \
- 1) \
+ name/**/2_imin_,name/**/2_imax_, 1) \
#define CCTK_ENDLOOP1_BOUNDARIES(name) \
CCTK_ENDLOOP1STR_BOUNDARIES(name) \
@@ -668,13 +676,12 @@
ibhi, \
ibboxlo, \
ibboxhi, \
- istr) \
+ imin,imax, istr) \
&& name/**/2_blo = (/ iblo /) \
&& name/**/2_bhi = (/ ibhi /) \
&& name/**/2_bboxlo = (/ ibboxlo /) \
&& name/**/2_bboxhi = (/ ibboxhi /) \
&& name/**/2_istr = (istr) \
- && /* Loop over all faces, edges, and corners */ \
&& do name/**/2_idir=-1, +1 \
&& name/**/2_any_bbox = .false. \
&& if (name/**/2_idir==-1) name/**/2_any_bbox = name/**/2_any_bbox .or. name/**/2_bboxlo(1) /= 0 \
@@ -693,7 +700,7 @@
name/**/2_bmin(1), \
name/**/2_bmax(1), \
cctk_ash(1), \
- name/**/2_istr) \
+ imin,imax, name/**/2_istr) \
#define CCTK_ENDLOOP1STR_BOUNDARIES(name) \
CCTK_ENDLOOP1STR_NORMAL(name/**/_boundaries) \
@@ -706,6 +713,7 @@
#define CCTK_LOOP1_INTBOUNDARIES_DECLARE(name) \
CCTK_LOOP1STR_INTBOUNDARIES_DECLARE(name) \
+ && integer :: name/**/2_imin_, name/**/2_imax_ \
#define CCTK_LOOP1_INTBOUNDARIES_OMP_PRIVATE(name) \
CCTK_LOOP1STR_INTBOUNDARIES_OMP_PRIVATE(name) \
@@ -724,7 +732,7 @@
ibhi, \
ibboxlo, \
ibboxhi, \
- 1) \
+ name/**/2_imin_,name/**/2_imax_, 1) \
#define CCTK_ENDLOOP1_INTBOUNDARIES(name) \
CCTK_ENDLOOP1STR_INTBOUNDARIES(name) \
@@ -748,13 +756,12 @@
ibhi, \
ibboxlo, \
ibboxhi, \
- istr) \
+ imin,imax, istr) \
&& name/**/2_blo = (/ iblo /) \
&& name/**/2_bhi = (/ ibhi /) \
&& name/**/2_bboxlo = (/ ibboxlo /) \
&& name/**/2_bboxhi = (/ ibboxhi /) \
&& name/**/2_istr = (istr) \
- && /* Loop over all faces, edges, and corners */ \
&& do name/**/2_idir=-1, +1 \
&& name/**/2_any_bbox = .false. \
&& if (name/**/2_idir==-1) name/**/2_any_bbox = name/**/2_any_bbox .or. name/**/2_bboxlo(1) /= 0 \
@@ -776,7 +783,7 @@
name/**/2_bmin(1), \
name/**/2_bmax(1), \
cctk_ash(1), \
- name/**/2_istr) \
+ imin,imax, name/**/2_istr) \
#define CCTK_ENDLOOP1STR_INTBOUNDARIES(name) \
CCTK_ENDLOOP1STR_NORMAL(name/**/_intboundaries) \
@@ -789,6 +796,7 @@
#define CCTK_LOOP1_ALL_DECLARE(name) \
CCTK_LOOP1STR_ALL_DECLARE(name) \
+ && integer :: name/**/3_imin_, name/**/3_imax_ \
#define CCTK_LOOP1_ALL_OMP_PRIVATE(name) \
CCTK_LOOP1STR_ALL_OMP_PRIVATE(name) \
@@ -797,7 +805,7 @@
i) \
CCTK_LOOP1STR_ALL(name, \
i, \
- 1) \
+ name/**/3_imin_,name/**/3_imax_, 1) \
#define CCTK_ENDLOOP1_ALL(name) \
CCTK_ENDLOOP1STR_ALL(name) \
@@ -810,13 +818,13 @@
#define CCTK_LOOP1STR_ALL(name, \
i, \
- istr) \
+ imin,imax, istr) \
CCTK_LOOP1STR(name/**/_all, \
i, \
1, \
cctk_lsh(1), \
cctk_ash(1), \
- istr) \
+ imin,imax, istr) \
#define CCTK_ENDLOOP1STR_ALL(name) \
CCTK_ENDLOOP1STR(name/**/_all) \
@@ -827,6 +835,7 @@
#define CCTK_LOOP1_INT_DECLARE(name) \
CCTK_LOOP1STR_INT_DECLARE(name) \
+ && integer :: name/**/3_imin_, name/**/3_imax_ \
#define CCTK_LOOP1_INT_OMP_PRIVATE(name) \
CCTK_LOOP1STR_INT_OMP_PRIVATE(name) \
@@ -835,7 +844,7 @@
i) \
CCTK_LOOP1STR_INT(name, \
i, \
- 1) \
+ name/**/3_imin_,name/**/3_imax_, 1) \
#define CCTK_ENDLOOP1_INT(name) \
CCTK_ENDLOOP1STR_INT(name) \
@@ -853,7 +862,7 @@
#define CCTK_LOOP1STR_INT(name, \
i, \
- istr) \
+ imin,imax, istr) \
&& !$omp single \
&& name/**/3_ierr = GetBoundarySizesAndTypes \
(cctkGH, 2, name/**/3_bndsize, name/**/3_is_ghostbnd, name/**/3_is_symbnd, name/**/3_is_physbnd) \
@@ -862,7 +871,7 @@
i, \
name/**/3_bndsize(1+1), \
name/**/3_bndsize(2), \
- (istr)) \
+ imin,imax, (istr)) \
#define CCTK_ENDLOOP1STR_INT(name) \
CCTK_ENDLOOP1STR_INTERIOR(name/**/int) \
@@ -873,6 +882,7 @@
#define CCTK_LOOP1_BND_DECLARE(name) \
CCTK_LOOP1STR_BND_DECLARE(name) \
+ && integer :: name/**/3_imin_, name/**/3_imax_ \
#define CCTK_LOOP1_BND_OMP_PRIVATE(name) \
CCTK_LOOP1STR_BND_OMP_PRIVATE(name) \
@@ -883,7 +893,7 @@
CCTK_LOOP1STR_BND(name, \
i, \
ni, \
- 1) \
+ name/**/3_imin_,name/**/3_imax_, 1) \
#define CCTK_ENDLOOP1_BND(name) \
CCTK_ENDLOOP1STR_BND(name) \
@@ -902,7 +912,7 @@
#define CCTK_LOOP1STR_BND(name, \
i, \
ni, \
- istr) \
+ imin,imax, istr) \
&& !$omp single \
&& name/**/3_ierr = GetBoundarySizesAndTypes \
(cctkGH, 2, name/**/3_bndsize, name/**/3_is_ghostbnd, name/**/3_is_symbnd, name/**/3_is_physbnd) \
@@ -914,7 +924,7 @@
name/**/3_bndsize(2), \
name/**/3_is_physbnd(1), \
name/**/3_is_physbnd(2), \
- (istr)) \
+ imin,imax, (istr)) \
#define CCTK_ENDLOOP1STR_BND(name) \
CCTK_ENDLOOP1STR_BOUNDARIES(name/**/_bnd) \
@@ -928,6 +938,7 @@
#define CCTK_LOOP1_INTBND_DECLARE(name) \
CCTK_LOOP1STR_INTBND_DECLARE(name) \
+ && integer :: name/**/3_imin_, name/**/3_imax_ \
#define CCTK_LOOP1_INTBND_OMP_PRIVATE(name) \
CCTK_LOOP1STR_INTBND_OMP_PRIVATE(name) \
@@ -938,7 +949,7 @@
CCTK_LOOP1STR_INTBND(name, \
i, \
ni, \
- 1) \
+ name/**/3_imin_,name/**/3_imax_, 1) \
#define CCTK_ENDLOOP1_INTBND(name) \
CCTK_ENDLOOP1STR_INTBND(name) \
@@ -957,7 +968,7 @@
#define CCTK_LOOP1STR_INTBND(name, \
i, \
ni, \
- istr) \
+ imin,imax, istr) \
&& !$omp single \
&& name/**/3_ierr = GetBoundarySizesAndTypes \
(cctkGH, 2, name/**/3_bndsize, name/**/3_is_ghostbnd, name/**/3_is_symbnd, name/**/3_is_physbnd) \
@@ -969,7 +980,7 @@
name/**/3_bndsize(2), \
name/**/3_is_physbnd(1), \
name/**/3_is_physbnd(2), \
- (istr)) \
+ imin,imax, (istr)) \
#define CCTK_ENDLOOP1STR_INTBND(name) \
CCTK_ENDLOOP1STR_INTBOUNDARIES(name/**/_bnd) \
@@ -998,7 +1009,7 @@
(imin),(jmin), \
(imax),(jmax), \
(iash),(jash), \
- 1) \
+ cctki0_imin_,cctki0_imax_, 1) \
#define CCTK_ENDLOOP2_NORMAL(name) \
CCTK_ENDLOOP2STR_NORMAL(name) \
@@ -1007,23 +1018,26 @@
i,j, \
ni,nj, \
idir,jdir, \
- imin,jmin, \
- imax,jmax, \
+ imin_,jmin_, \
+ imax_,jmax_, \
iash,jash, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki0_loop2_normal_##name; \
int const cctki0_idir = (idir); \
int const cctki0_jdir = (jdir); \
- int const cctki0_imin = (imin); \
- int const cctki0_jmin = (jmin); \
- int const cctki0_imax = (imax); \
- int const cctki0_jmax = (jmax); \
- int const cctki0_istr CCTK_ATTRIBUTE_UNUSED = (istr); \
- assert(cctki0_istr == 1); \
- _Pragma("omp for") \
+ int const cctki0_imin = (imin_); \
+ int const cctki0_jmin = (jmin_); \
+ int const cctki0_imax = (imax_); \
+ int const cctki0_jmax = (jmax_); \
+ int const cctki0_iash = (iash); \
+ int const cctki0_jash = (jash); \
+ int const cctki0_istr = (istr); \
+ int const imin = cctki0_imin; \
+ int const imax = cctki0_imax; \
+ _Pragma("omp for collapse(1)") \
for (int j=cctki0_jmin; j<cctki0_jmax; ++j) { \
- for (int i=cctki0_imin; i<cctki0_imax; ++i) { \
+ for (int i=cctki0_imin - (imin+cctki0_iash*(j)) % cctki0_istr; i<cctki0_imax; i+=cctki0_istr) { \
int const ni CCTK_ATTRIBUTE_UNUSED = cctki0_idir<0 ? i+1 : cctki0_idir==0 ? 0 : cctki0_imax-i; \
int const nj CCTK_ATTRIBUTE_UNUSED = cctki0_jdir<0 ? j+1 : cctki0_jdir==0 ? 0 : cctki0_jmax-j; \
{ \
@@ -1047,25 +1061,25 @@
(imin),(jmin), \
(imax),(jmax), \
(iash),(jash), \
- 1) \
+ cctki1_imin_,cctki1_imax_, 1) \
#define CCTK_ENDLOOP2(name) \
CCTK_ENDLOOP2STR(name) \
#define CCTK_LOOP2STR(name, \
i,j, \
- imin,jmin, \
- imax,jmax, \
+ imin_,jmin_, \
+ imax_,jmax_, \
iash,jash, \
- istr) \
+ imin,imax, istr) \
CCTK_LOOP2STR_NORMAL(name, \
i,j, \
cctki1_ni,cctki1_nj, \
0,0, \
- imin,jmin, \
- imax,jmax, \
+ imin_,jmin_, \
+ imax_,jmax_, \
iash,jash, \
- istr) \
+ imin,imax, istr) \
#define CCTK_ENDLOOP2STR(name) \
CCTK_ENDLOOP2STR_NORMAL(name) \
@@ -1082,7 +1096,7 @@
i,j, \
(iblo),(jblo), \
(ibhi),(jbhi), \
- 1) \
+ cctki2_imin_,cctki2_imax_, 1) \
#define CCTK_ENDLOOP2_INTERIOR(name) \
CCTK_ENDLOOP2STR_INTERIOR(name) \
@@ -1091,7 +1105,7 @@
i,j, \
iblo,jblo, \
ibhi,jbhi, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki2_loop2_interior_##name; \
cGH const *restrict const cctki2_cctkGH = (cctkGH); \
@@ -1107,7 +1121,7 @@
cctki2_cctkGH->cctk_lsh[1]-(jbhi), \
cctki2_cctkGH->cctk_ash[0], \
cctki2_cctkGH->cctk_ash[1], \
- (istr)) { \
+ imin,imax, (istr)) { \
#define CCTK_ENDLOOP2STR_INTERIOR(name) \
} CCTK_ENDLOOP2STR(name##_interior); \
@@ -1132,7 +1146,7 @@
(ibhi),(jbhi), \
(ibboxlo),(jbboxlo), \
(ibboxhi),(jbboxhi), \
- 1) \
+ cctki2_imin_,cctki2_imax_, 1) \
#define CCTK_ENDLOOP2_BOUNDARIES(name) \
CCTK_ENDLOOP2STR_BOUNDARIES(name) \
@@ -1144,7 +1158,7 @@
ibhi,jbhi, \
ibboxlo,jbboxlo, \
ibboxhi,jbboxhi, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki2_loop2_boundaries_##name; \
cGH const *restrict const cctki2_cctkGH = (cctkGH); \
@@ -1158,7 +1172,6 @@
int const cctki2_bbox[] = { (ibboxlo), (ibboxhi),(jbboxlo), (jbboxhi) }; \
int const cctki2_lsh[] = { cctki2_cctkGH->cctk_lsh[0],cctki2_cctkGH->cctk_lsh[1] }; \
int const cctki2_istr CCTK_ATTRIBUTE_UNUSED = (istr); \
- /* Loop over all faces, edges, and corners */ \
for (int cctki2_jdir=-1; cctki2_jdir<=+1; ++cctki2_jdir) { \
for (int cctki2_idir=-1; cctki2_idir<=+1; ++cctki2_idir) { \
int cctki2_any_bbox = \
@@ -1181,7 +1194,7 @@
cctki2_bmax[0],cctki2_bmax[1], \
cctki2_cctkGH->cctk_ash[0], \
cctki2_cctkGH->cctk_ash[1], \
- cctki2_istr) { \
+ imin,imax, cctki2_istr) { \
#define CCTK_ENDLOOP2STR_BOUNDARIES(name) \
} CCTK_ENDLOOP2STR_NORMAL(name##_boundaries); \
@@ -1209,7 +1222,7 @@
(ibhi),(jbhi), \
(ibboxlo),(jbboxlo), \
(ibboxhi),(jbboxhi), \
- 1) \
+ cctki2_imin_,cctki2_imax_, 1) \
#define CCTK_ENDLOOP2_INTBOUNDARIES(name) \
CCTK_ENDLOOP2STR_INTBOUNDARIES(name) \
@@ -1221,7 +1234,7 @@
ibhi,jbhi, \
ibboxlo,jbboxlo, \
ibboxhi,jbboxhi, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki2_loop2_intboundaries_##name; \
cGH const *restrict const cctki2_cctkGH = (cctkGH); \
@@ -1235,7 +1248,6 @@
int const cctki2_bbox[] = { (ibboxlo), (ibboxhi),(jbboxlo), (jbboxhi) }; \
int const cctki2_lsh[] = { cctki2_cctkGH->cctk_lsh[0],cctki2_cctkGH->cctk_lsh[1] }; \
int const cctki2_istr CCTK_ATTRIBUTE_UNUSED = (istr); \
- /* Loop over all faces, edges, and corners */ \
for (int cctki2_jdir=-1; cctki2_jdir<=+1; ++cctki2_jdir) { \
for (int cctki2_idir=-1; cctki2_idir<=+1; ++cctki2_idir) { \
int cctki2_any_bbox = \
@@ -1261,7 +1273,7 @@
cctki2_bmax[0],cctki2_bmax[1], \
cctki2_cctkGH->cctk_ash[0], \
cctki2_cctkGH->cctk_ash[1], \
- cctki2_istr) { \
+ imin,imax, cctki2_istr) { \
#define CCTK_ENDLOOP2STR_INTBOUNDARIES(name) \
} CCTK_ENDLOOP2STR_NORMAL(name##_intboundaries); \
@@ -1279,14 +1291,14 @@
i,j) \
CCTK_LOOP2STR_ALL(name, (cctkGH), \
i,j, \
- 1) \
+ cctki3_imin_,cctki3_imax_, 1) \
#define CCTK_ENDLOOP2_ALL(name) \
CCTK_ENDLOOP2STR_ALL(name) \
#define CCTK_LOOP2STR_ALL(name, cctkGH, \
i,j, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki3_loop2_all_##name; \
cGH const *restrict const cctki3_cctkGH = (cctkGH); \
@@ -1302,7 +1314,7 @@
cctki3_cctkGH->cctk_lsh[1], \
cctki3_cctkGH->cctk_ash[0], \
cctki3_cctkGH->cctk_ash[1], \
- (istr)) { \
+ imin,imax, (istr)) { \
#define CCTK_ENDLOOP2STR_ALL(name) \
} CCTK_ENDLOOP2STR(name##_all); \
@@ -1317,14 +1329,14 @@
i,j) \
CCTK_LOOP2STR_INT(name, (cctkGH), \
i,j, \
- 1) \
+ cctki3_imin_,cctki3_imax_, 1) \
#define CCTK_ENDLOOP2_INT(name) \
CCTK_ENDLOOP2STR_INT(name) \
#define CCTK_LOOP2STR_INT(name, cctkGH, \
i,j, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki3_loop2_int_##name; \
cGH const *restrict const cctki3_cctkGH = (cctkGH); \
@@ -1345,7 +1357,7 @@
i,j, \
cctki3_bndsize[0],cctki3_bndsize[2], \
cctki3_bndsize[1],cctki3_bndsize[3], \
- (istr)) { \
+ imin,imax, (istr)) { \
#define CCTK_ENDLOOP2STR_INT(name) \
} CCTK_ENDLOOP2STR_INTERIOR(name##_int); \
@@ -1362,7 +1374,7 @@
CCTK_LOOP2STR_BND(name, (cctkGH), \
i,j, \
ni,nj, \
- 1) \
+ cctki3_imin_,cctki3_imax_, 1) \
#define CCTK_ENDLOOP2_BND(name) \
CCTK_ENDLOOP2STR_BND(name) \
@@ -1370,7 +1382,7 @@
#define CCTK_LOOP2STR_BND(name, cctkGH, \
i,j, \
ni,nj, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki3_loop2_bnd_##name; \
cGH const *restrict const cctki3_cctkGH = (cctkGH); \
@@ -1394,7 +1406,7 @@
cctki3_bndsize[1],cctki3_bndsize[3], \
cctki3_is_physbnd[0],cctki3_is_physbnd[2], \
cctki3_is_physbnd[1],cctki3_is_physbnd[3], \
- (istr)) { \
+ imin,imax, (istr)) { \
#define CCTK_ENDLOOP2STR_BND(name) \
} CCTK_ENDLOOP2STR_BOUNDARIES(name##_bnd); \
@@ -1411,7 +1423,7 @@
CCTK_LOOP2STR_INTBND(name, (cctkGH), \
i,j, \
ni,nj, \
- 1) \
+ cctki3_imin_,cctki3_imax_, 1) \
#define CCTK_ENDLOOP2_INTBND(name) \
CCTK_ENDLOOP2STR_INTBND(name) \
@@ -1419,7 +1431,7 @@
#define CCTK_LOOP2STR_INTBND(name, cctkGH, \
i,j, \
ni,nj, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki3_loop2_intbnd_##name; \
cGH const *restrict const cctki3_cctkGH = (cctkGH); \
@@ -1443,7 +1455,7 @@
cctki3_bndsize[1],cctki3_bndsize[3], \
cctki3_is_physbnd[0],cctki3_is_physbnd[2], \
cctki3_is_physbnd[1],cctki3_is_physbnd[3], \
- (istr)) { \
+ imin,imax, (istr)) { \
#define CCTK_ENDLOOP2STR_INTBND(name) \
} CCTK_ENDLOOP2STR_INTBOUNDARIES(name##_intbnd); \
@@ -1460,6 +1472,7 @@
#define CCTK_LOOP2_NORMAL_DECLARE(name) \
CCTK_LOOP2STR_NORMAL_DECLARE(name) \
+ && integer :: name/**/0_imin_, name/**/0_imax_ \
#define CCTK_LOOP2_NORMAL_OMP_PRIVATE(name) \
CCTK_LOOP2STR_NORMAL_OMP_PRIVATE(name) \
@@ -1478,7 +1491,7 @@
imin,jmin, \
imax,jmax, \
iash,jash, \
- 1) \
+ name/**/0_imin_,name/**/0_imax_, 1) \
#define CCTK_ENDLOOP2_NORMAL(name) \
CCTK_ENDLOOP2STR_NORMAL(name) \
@@ -1487,6 +1500,7 @@
&& integer :: name/**/0_idir,name/**/0_jdir \
&& integer :: name/**/0_imin,name/**/0_jmin \
&& integer :: name/**/0_imax,name/**/0_jmax \
+ && integer :: name/**/0_iash,name/**/0_jash \
&& integer :: name/**/0_istr \
#define CCTK_LOOP2STR_NORMAL_OMP_PRIVATE(name) \
@@ -1497,20 +1511,24 @@
i,j, \
ni,nj, \
idir,jdir, \
- imin,jmin, \
- imax,jmax, \
+ imin_,jmin_, \
+ imax_,jmax_, \
iash,jash, \
- istr) \
+ imin,imax, istr) \
&& name/**/0_idir = idir \
&& name/**/0_jdir = jdir \
- && name/**/0_imin = imin \
- && name/**/0_jmin = jmin \
- && name/**/0_imax = imax \
- && name/**/0_jmax = jmax \
+ && name/**/0_imin = imin_ \
+ && name/**/0_jmin = jmin_ \
+ && name/**/0_imax = imax_ \
+ && name/**/0_jmax = jmax_ \
+ && name/**/0_iash = iash \
+ && name/**/0_jash = jash \
&& name/**/0_istr = istr \
- && !$omp do \
+ && imin = name/**/0_imin \
+ && imax = name/**/0_imax \
+ && !$omp do collapse(1) \
&& do j = name/**/0_jmin, name/**/0_jmax \
- && do i = name/**/0_imin, name/**/0_imax \
+ && do i = name/**/0_imin - modulo((imin+name/**/0_iash*(j)), name/**/0_istr), name/**/0_imax \
&& if (name/**/0_idir< 0) ni = i \
&& if (name/**/0_jdir< 0) nj = j \
&& if (name/**/0_idir==0) ni = 0 \
@@ -1526,6 +1544,7 @@
#define CCTK_LOOP2_DECLARE(name) \
CCTK_LOOP2STR_DECLARE(name) \
+ && integer :: name/**/1_imin_, name/**/1_imax_ \
#define CCTK_LOOP2_OMP_PRIVATE(name) \
CCTK_LOOP2STR_OMP_PRIVATE(name) \
@@ -1540,7 +1559,7 @@
imin,jmin, \
imax,jmax, \
iash,jash, \
- 1) \
+ name/**/1_imin_,name/**/1_imax_, 1) \
#define CCTK_ENDLOOP2(name) \
CCTK_ENDLOOP2STR(name) \
@@ -1554,18 +1573,18 @@
#define CCTK_LOOP2STR(name, \
i,j, \
- imin,jmin, \
- imax,jmax, \
+ imin_,jmin_, \
+ imax_,jmax_, \
iash,jash, \
- istr) \
+ imin,imax, istr) \
CCTK_LOOP2STR_NORMAL(name, \
i,j, \
name/**/1_ni,name/**/1_nj, \
0,0, \
- imin,jmin, \
- imax,jmax, \
+ imin_,jmin_, \
+ imax_,jmax_, \
iash,jash, \
- istr) \
+ imin,imax, istr) \
#define CCTK_ENDLOOP2STR(name) \
CCTK_ENDLOOP2STR_NORMAL(name) \
@@ -1576,6 +1595,7 @@
#define CCTK_LOOP2_INTERIOR_DECLARE(name) \
CCTK_LOOP2STR_INTERIOR_DECLARE(name) \
+ && integer :: name/**/2_imin_, name/**/2_imax_ \
#define CCTK_LOOP2_INTERIOR_OMP_PRIVATE(name) \
CCTK_LOOP2STR_INTERIOR_OMP_PRIVATE(name) \
@@ -1588,7 +1608,7 @@
i,j, \
iblo,jblo, \
ibhi,jbhi, \
- 1) \
+ name/**/2_imin_,name/**/2_imax_, 1) \
#define CCTK_ENDLOOP2_INTERIOR(name) \
CCTK_ENDLOOP2STR_INTERIOR(name) \
@@ -1603,7 +1623,7 @@
i,j, \
iblo,jblo, \
ibhi,jbhi, \
- istr) \
+ imin,imax, istr) \
CCTK_LOOP2STR(name/**/_interior, \
i,j, \
(iblo)+1, \
@@ -1611,7 +1631,7 @@
cctk_lsh(1)-(ibhi), \
cctk_lsh(2)-(jbhi), \
cctk_ash(1),cctk_ash(2), \
- istr) \
+ imin,imax, istr) \
#define CCTK_ENDLOOP2STR_INTERIOR(name) \
CCTK_ENDLOOP2STR(name/**/_interior) \
@@ -1622,6 +1642,7 @@
#define CCTK_LOOP2_BOUNDARIES_DECLARE(name) \
CCTK_LOOP2STR_BOUNDARIES_DECLARE(name) \
+ && integer :: name/**/2_imin_, name/**/2_imax_ \
#define CCTK_LOOP2_BOUNDARIES_OMP_PRIVATE(name) \
CCTK_LOOP2STR_BOUNDARIES_OMP_PRIVATE(name) \
@@ -1640,7 +1661,7 @@
ibhi,jbhi, \
ibboxlo,jbboxlo, \
ibboxhi,jbboxhi, \
- 1) \
+ name/**/2_imin_,name/**/2_imax_, 1) \
#define CCTK_ENDLOOP2_BOUNDARIES(name) \
CCTK_ENDLOOP2STR_BOUNDARIES(name) \
@@ -1665,13 +1686,12 @@
ibhi,jbhi, \
ibboxlo,jbboxlo, \
ibboxhi,jbboxhi, \
- istr) \
+ imin,imax, istr) \
&& name/**/2_blo = (/ iblo,jblo /) \
&& name/**/2_bhi = (/ ibhi,jbhi /) \
&& name/**/2_bboxlo = (/ ibboxlo,jbboxlo /) \
&& name/**/2_bboxhi = (/ ibboxhi,jbboxhi /) \
&& name/**/2_istr = (istr) \
- && /* Loop over all faces, edges, and corners */ \
&& do name/**/2_jdir=-1, +1 \
&& do name/**/2_idir=-1, +1 \
&& name/**/2_any_bbox = .false. \
@@ -1700,7 +1720,7 @@
name/**/2_bmax(1),name/**/2_bmax(2), \
cctk_ash(1), \
cctk_ash(2), \
- name/**/2_istr) \
+ imin,imax, name/**/2_istr) \
#define CCTK_ENDLOOP2STR_BOUNDARIES(name) \
CCTK_ENDLOOP2STR_NORMAL(name/**/_boundaries) \
@@ -1714,6 +1734,7 @@
#define CCTK_LOOP2_INTBOUNDARIES_DECLARE(name) \
CCTK_LOOP2STR_INTBOUNDARIES_DECLARE(name) \
+ && integer :: name/**/2_imin_, name/**/2_imax_ \
#define CCTK_LOOP2_INTBOUNDARIES_OMP_PRIVATE(name) \
CCTK_LOOP2STR_INTBOUNDARIES_OMP_PRIVATE(name) \
@@ -1732,7 +1753,7 @@
ibhi,jbhi, \
ibboxlo,jbboxlo, \
ibboxhi,jbboxhi, \
- 1) \
+ name/**/2_imin_,name/**/2_imax_, 1) \
#define CCTK_ENDLOOP2_INTBOUNDARIES(name) \
CCTK_ENDLOOP2STR_INTBOUNDARIES(name) \
@@ -1757,13 +1778,12 @@
ibhi,jbhi, \
ibboxlo,jbboxlo, \
ibboxhi,jbboxhi, \
- istr) \
+ imin,imax, istr) \
&& name/**/2_blo = (/ iblo,jblo /) \
&& name/**/2_bhi = (/ ibhi,jbhi /) \
&& name/**/2_bboxlo = (/ ibboxlo,jbboxlo /) \
&& name/**/2_bboxhi = (/ ibboxhi,jbboxhi /) \
&& name/**/2_istr = (istr) \
- && /* Loop over all faces, edges, and corners */ \
&& do name/**/2_jdir=-1, +1 \
&& do name/**/2_idir=-1, +1 \
&& name/**/2_any_bbox = .false. \
@@ -1797,7 +1817,7 @@
name/**/2_bmax(1),name/**/2_bmax(2), \
cctk_ash(1), \
cctk_ash(2), \
- name/**/2_istr) \
+ imin,imax, name/**/2_istr) \
#define CCTK_ENDLOOP2STR_INTBOUNDARIES(name) \
CCTK_ENDLOOP2STR_NORMAL(name/**/_intboundaries) \
@@ -1811,6 +1831,7 @@
#define CCTK_LOOP2_ALL_DECLARE(name) \
CCTK_LOOP2STR_ALL_DECLARE(name) \
+ && integer :: name/**/3_imin_, name/**/3_imax_ \
#define CCTK_LOOP2_ALL_OMP_PRIVATE(name) \
CCTK_LOOP2STR_ALL_OMP_PRIVATE(name) \
@@ -1819,7 +1840,7 @@
i,j) \
CCTK_LOOP2STR_ALL(name, \
i,j, \
- 1) \
+ name/**/3_imin_,name/**/3_imax_, 1) \
#define CCTK_ENDLOOP2_ALL(name) \
CCTK_ENDLOOP2STR_ALL(name) \
@@ -1832,13 +1853,13 @@
#define CCTK_LOOP2STR_ALL(name, \
i,j, \
- istr) \
+ imin,imax, istr) \
CCTK_LOOP2STR(name/**/_all, \
i,j, \
1,1, \
cctk_lsh(1),cctk_lsh(2), \
cctk_ash(1),cctk_ash(2), \
- istr) \
+ imin,imax, istr) \
#define CCTK_ENDLOOP2STR_ALL(name) \
CCTK_ENDLOOP2STR(name/**/_all) \
@@ -1849,6 +1870,7 @@
#define CCTK_LOOP2_INT_DECLARE(name) \
CCTK_LOOP2STR_INT_DECLARE(name) \
+ && integer :: name/**/3_imin_, name/**/3_imax_ \
#define CCTK_LOOP2_INT_OMP_PRIVATE(name) \
CCTK_LOOP2STR_INT_OMP_PRIVATE(name) \
@@ -1857,7 +1879,7 @@
i,j) \
CCTK_LOOP2STR_INT(name, \
i,j, \
- 1) \
+ name/**/3_imin_,name/**/3_imax_, 1) \
#define CCTK_ENDLOOP2_INT(name) \
CCTK_ENDLOOP2STR_INT(name) \
@@ -1875,7 +1897,7 @@
#define CCTK_LOOP2STR_INT(name, \
i,j, \
- istr) \
+ imin,imax, istr) \
&& !$omp single \
&& name/**/3_ierr = GetBoundarySizesAndTypes \
(cctkGH, 4, name/**/3_bndsize, name/**/3_is_ghostbnd, name/**/3_is_symbnd, name/**/3_is_physbnd) \
@@ -1884,7 +1906,7 @@
i,j, \
name/**/3_bndsize(1+1),name/**/3_bndsize(3+1), \
name/**/3_bndsize(2),name/**/3_bndsize(4), \
- (istr)) \
+ imin,imax, (istr)) \
#define CCTK_ENDLOOP2STR_INT(name) \
CCTK_ENDLOOP2STR_INTERIOR(name/**/int) \
@@ -1895,6 +1917,7 @@
#define CCTK_LOOP2_BND_DECLARE(name) \
CCTK_LOOP2STR_BND_DECLARE(name) \
+ && integer :: name/**/3_imin_, name/**/3_imax_ \
#define CCTK_LOOP2_BND_OMP_PRIVATE(name) \
CCTK_LOOP2STR_BND_OMP_PRIVATE(name) \
@@ -1905,7 +1928,7 @@
CCTK_LOOP2STR_BND(name, \
i,j, \
ni,nj, \
- 1) \
+ name/**/3_imin_,name/**/3_imax_, 1) \
#define CCTK_ENDLOOP2_BND(name) \
CCTK_ENDLOOP2STR_BND(name) \
@@ -1924,7 +1947,7 @@
#define CCTK_LOOP2STR_BND(name, \
i,j, \
ni,nj, \
- istr) \
+ imin,imax, istr) \
&& !$omp single \
&& name/**/3_ierr = GetBoundarySizesAndTypes \
(cctkGH, 4, name/**/3_bndsize, name/**/3_is_ghostbnd, name/**/3_is_symbnd, name/**/3_is_physbnd) \
@@ -1936,7 +1959,7 @@
name/**/3_bndsize(2),name/**/3_bndsize(4), \
name/**/3_is_physbnd(1),name/**/3_is_physbnd(3), \
name/**/3_is_physbnd(2),name/**/3_is_physbnd(4), \
- (istr)) \
+ imin,imax, (istr)) \
#define CCTK_ENDLOOP2STR_BND(name) \
CCTK_ENDLOOP2STR_BOUNDARIES(name/**/_bnd) \
@@ -1950,6 +1973,7 @@
#define CCTK_LOOP2_INTBND_DECLARE(name) \
CCTK_LOOP2STR_INTBND_DECLARE(name) \
+ && integer :: name/**/3_imin_, name/**/3_imax_ \
#define CCTK_LOOP2_INTBND_OMP_PRIVATE(name) \
CCTK_LOOP2STR_INTBND_OMP_PRIVATE(name) \
@@ -1960,7 +1984,7 @@
CCTK_LOOP2STR_INTBND(name, \
i,j, \
ni,nj, \
- 1) \
+ name/**/3_imin_,name/**/3_imax_, 1) \
#define CCTK_ENDLOOP2_INTBND(name) \
CCTK_ENDLOOP2STR_INTBND(name) \
@@ -1979,7 +2003,7 @@
#define CCTK_LOOP2STR_INTBND(name, \
i,j, \
ni,nj, \
- istr) \
+ imin,imax, istr) \
&& !$omp single \
&& name/**/3_ierr = GetBoundarySizesAndTypes \
(cctkGH, 4, name/**/3_bndsize, name/**/3_is_ghostbnd, name/**/3_is_symbnd, name/**/3_is_physbnd) \
@@ -1991,7 +2015,7 @@
name/**/3_bndsize(2),name/**/3_bndsize(4), \
name/**/3_is_physbnd(1),name/**/3_is_physbnd(3), \
name/**/3_is_physbnd(2),name/**/3_is_physbnd(4), \
- (istr)) \
+ imin,imax, (istr)) \
#define CCTK_ENDLOOP2STR_INTBND(name) \
CCTK_ENDLOOP2STR_INTBOUNDARIES(name/**/_bnd) \
@@ -2020,7 +2044,7 @@
(imin),(jmin),(kmin), \
(imax),(jmax),(kmax), \
(iash),(jash),(kash), \
- 1) \
+ cctki0_imin_,cctki0_imax_, 1) \
#define CCTK_ENDLOOP3_NORMAL(name) \
CCTK_ENDLOOP3STR_NORMAL(name) \
@@ -2029,27 +2053,31 @@
i,j,k, \
ni,nj,nk, \
idir,jdir,kdir, \
- imin,jmin,kmin, \
- imax,jmax,kmax, \
+ imin_,jmin_,kmin_, \
+ imax_,jmax_,kmax_, \
iash,jash,kash, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki0_loop3_normal_##name; \
int const cctki0_idir = (idir); \
int const cctki0_jdir = (jdir); \
int const cctki0_kdir = (kdir); \
- int const cctki0_imin = (imin); \
- int const cctki0_jmin = (jmin); \
- int const cctki0_kmin = (kmin); \
- int const cctki0_imax = (imax); \
- int const cctki0_jmax = (jmax); \
- int const cctki0_kmax = (kmax); \
- int const cctki0_istr CCTK_ATTRIBUTE_UNUSED = (istr); \
- assert(cctki0_istr == 1); \
- _Pragma("omp for") \
+ int const cctki0_imin = (imin_); \
+ int const cctki0_jmin = (jmin_); \
+ int const cctki0_kmin = (kmin_); \
+ int const cctki0_imax = (imax_); \
+ int const cctki0_jmax = (jmax_); \
+ int const cctki0_kmax = (kmax_); \
+ int const cctki0_iash = (iash); \
+ int const cctki0_jash = (jash); \
+ int const cctki0_kash = (kash); \
+ int const cctki0_istr = (istr); \
+ int const imin = cctki0_imin; \
+ int const imax = cctki0_imax; \
+ _Pragma("omp for collapse(2)") \
for (int k=cctki0_kmin; k<cctki0_kmax; ++k) { \
for (int j=cctki0_jmin; j<cctki0_jmax; ++j) { \
- for (int i=cctki0_imin; i<cctki0_imax; ++i) { \
+ for (int i=cctki0_imin - (imin+cctki0_iash*(j+cctki0_jash*(k))) % cctki0_istr; i<cctki0_imax; i+=cctki0_istr) { \
int const ni CCTK_ATTRIBUTE_UNUSED = cctki0_idir<0 ? i+1 : cctki0_idir==0 ? 0 : cctki0_imax-i; \
int const nj CCTK_ATTRIBUTE_UNUSED = cctki0_jdir<0 ? j+1 : cctki0_jdir==0 ? 0 : cctki0_jmax-j; \
int const nk CCTK_ATTRIBUTE_UNUSED = cctki0_kdir<0 ? k+1 : cctki0_kdir==0 ? 0 : cctki0_kmax-k; \
@@ -2075,25 +2103,25 @@
(imin),(jmin),(kmin), \
(imax),(jmax),(kmax), \
(iash),(jash),(kash), \
- 1) \
+ cctki1_imin_,cctki1_imax_, 1) \
#define CCTK_ENDLOOP3(name) \
CCTK_ENDLOOP3STR(name) \
#define CCTK_LOOP3STR(name, \
i,j,k, \
- imin,jmin,kmin, \
- imax,jmax,kmax, \
+ imin_,jmin_,kmin_, \
+ imax_,jmax_,kmax_, \
iash,jash,kash, \
- istr) \
+ imin,imax, istr) \
CCTK_LOOP3STR_NORMAL(name, \
i,j,k, \
cctki1_ni,cctki1_nj,cctki1_nk, \
0,0,0, \
- imin,jmin,kmin, \
- imax,jmax,kmax, \
+ imin_,jmin_,kmin_, \
+ imax_,jmax_,kmax_, \
iash,jash,kash, \
- istr) \
+ imin,imax, istr) \
#define CCTK_ENDLOOP3STR(name) \
CCTK_ENDLOOP3STR_NORMAL(name) \
@@ -2110,7 +2138,7 @@
i,j,k, \
(iblo),(jblo),(kblo), \
(ibhi),(jbhi),(kbhi), \
- 1) \
+ cctki2_imin_,cctki2_imax_, 1) \
#define CCTK_ENDLOOP3_INTERIOR(name) \
CCTK_ENDLOOP3STR_INTERIOR(name) \
@@ -2119,7 +2147,7 @@
i,j,k, \
iblo,jblo,kblo, \
ibhi,jbhi,kbhi, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki2_loop3_interior_##name; \
cGH const *restrict const cctki2_cctkGH = (cctkGH); \
@@ -2137,7 +2165,7 @@
cctki2_cctkGH->cctk_ash[0], \
cctki2_cctkGH->cctk_ash[1], \
cctki2_cctkGH->cctk_ash[2], \
- (istr)) { \
+ imin,imax, (istr)) { \
#define CCTK_ENDLOOP3STR_INTERIOR(name) \
} CCTK_ENDLOOP3STR(name##_interior); \
@@ -2162,7 +2190,7 @@
(ibhi),(jbhi),(kbhi), \
(ibboxlo),(jbboxlo),(kbboxlo), \
(ibboxhi),(jbboxhi),(kbboxhi), \
- 1) \
+ cctki2_imin_,cctki2_imax_, 1) \
#define CCTK_ENDLOOP3_BOUNDARIES(name) \
CCTK_ENDLOOP3STR_BOUNDARIES(name) \
@@ -2174,7 +2202,7 @@
ibhi,jbhi,kbhi, \
ibboxlo,jbboxlo,kbboxlo, \
ibboxhi,jbboxhi,kbboxhi, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki2_loop3_boundaries_##name; \
cGH const *restrict const cctki2_cctkGH = (cctkGH); \
@@ -2188,7 +2216,6 @@
int const cctki2_bbox[] = { (ibboxlo), (ibboxhi),(jbboxlo), (jbboxhi),(kbboxlo), (kbboxhi) }; \
int const cctki2_lsh[] = { cctki2_cctkGH->cctk_lsh[0],cctki2_cctkGH->cctk_lsh[1],cctki2_cctkGH->cctk_lsh[2] }; \
int const cctki2_istr CCTK_ATTRIBUTE_UNUSED = (istr); \
- /* Loop over all faces, edges, and corners */ \
for (int cctki2_kdir=-1; cctki2_kdir<=+1; ++cctki2_kdir) { \
for (int cctki2_jdir=-1; cctki2_jdir<=+1; ++cctki2_jdir) { \
for (int cctki2_idir=-1; cctki2_idir<=+1; ++cctki2_idir) { \
@@ -2216,7 +2243,7 @@
cctki2_cctkGH->cctk_ash[0], \
cctki2_cctkGH->cctk_ash[1], \
cctki2_cctkGH->cctk_ash[2], \
- cctki2_istr) { \
+ imin,imax, cctki2_istr) { \
#define CCTK_ENDLOOP3STR_BOUNDARIES(name) \
} CCTK_ENDLOOP3STR_NORMAL(name##_boundaries); \
@@ -2245,7 +2272,7 @@
(ibhi),(jbhi),(kbhi), \
(ibboxlo),(jbboxlo),(kbboxlo), \
(ibboxhi),(jbboxhi),(kbboxhi), \
- 1) \
+ cctki2_imin_,cctki2_imax_, 1) \
#define CCTK_ENDLOOP3_INTBOUNDARIES(name) \
CCTK_ENDLOOP3STR_INTBOUNDARIES(name) \
@@ -2257,7 +2284,7 @@
ibhi,jbhi,kbhi, \
ibboxlo,jbboxlo,kbboxlo, \
ibboxhi,jbboxhi,kbboxhi, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki2_loop3_intboundaries_##name; \
cGH const *restrict const cctki2_cctkGH = (cctkGH); \
@@ -2271,7 +2298,6 @@
int const cctki2_bbox[] = { (ibboxlo), (ibboxhi),(jbboxlo), (jbboxhi),(kbboxlo), (kbboxhi) }; \
int const cctki2_lsh[] = { cctki2_cctkGH->cctk_lsh[0],cctki2_cctkGH->cctk_lsh[1],cctki2_cctkGH->cctk_lsh[2] }; \
int const cctki2_istr CCTK_ATTRIBUTE_UNUSED = (istr); \
- /* Loop over all faces, edges, and corners */ \
for (int cctki2_kdir=-1; cctki2_kdir<=+1; ++cctki2_kdir) { \
for (int cctki2_jdir=-1; cctki2_jdir<=+1; ++cctki2_jdir) { \
for (int cctki2_idir=-1; cctki2_idir<=+1; ++cctki2_idir) { \
@@ -2303,7 +2329,7 @@
cctki2_cctkGH->cctk_ash[0], \
cctki2_cctkGH->cctk_ash[1], \
cctki2_cctkGH->cctk_ash[2], \
- cctki2_istr) { \
+ imin,imax, cctki2_istr) { \
#define CCTK_ENDLOOP3STR_INTBOUNDARIES(name) \
} CCTK_ENDLOOP3STR_NORMAL(name##_intboundaries); \
@@ -2322,14 +2348,14 @@
i,j,k) \
CCTK_LOOP3STR_ALL(name, (cctkGH), \
i,j,k, \
- 1) \
+ cctki3_imin_,cctki3_imax_, 1) \
#define CCTK_ENDLOOP3_ALL(name) \
CCTK_ENDLOOP3STR_ALL(name) \
#define CCTK_LOOP3STR_ALL(name, cctkGH, \
i,j,k, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki3_loop3_all_##name; \
cGH const *restrict const cctki3_cctkGH = (cctkGH); \
@@ -2347,7 +2373,7 @@
cctki3_cctkGH->cctk_ash[0], \
cctki3_cctkGH->cctk_ash[1], \
cctki3_cctkGH->cctk_ash[2], \
- (istr)) { \
+ imin,imax, (istr)) { \
#define CCTK_ENDLOOP3STR_ALL(name) \
} CCTK_ENDLOOP3STR(name##_all); \
@@ -2362,14 +2388,14 @@
i,j,k) \
CCTK_LOOP3STR_INT(name, (cctkGH), \
i,j,k, \
- 1) \
+ cctki3_imin_,cctki3_imax_, 1) \
#define CCTK_ENDLOOP3_INT(name) \
CCTK_ENDLOOP3STR_INT(name) \
#define CCTK_LOOP3STR_INT(name, cctkGH, \
i,j,k, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki3_loop3_int_##name; \
cGH const *restrict const cctki3_cctkGH = (cctkGH); \
@@ -2390,7 +2416,7 @@
i,j,k, \
cctki3_bndsize[0],cctki3_bndsize[2],cctki3_bndsize[4], \
cctki3_bndsize[1],cctki3_bndsize[3],cctki3_bndsize[5], \
- (istr)) { \
+ imin,imax, (istr)) { \
#define CCTK_ENDLOOP3STR_INT(name) \
} CCTK_ENDLOOP3STR_INTERIOR(name##_int); \
@@ -2407,7 +2433,7 @@
CCTK_LOOP3STR_BND(name, (cctkGH), \
i,j,k, \
ni,nj,nk, \
- 1) \
+ cctki3_imin_,cctki3_imax_, 1) \
#define CCTK_ENDLOOP3_BND(name) \
CCTK_ENDLOOP3STR_BND(name) \
@@ -2415,7 +2441,7 @@
#define CCTK_LOOP3STR_BND(name, cctkGH, \
i,j,k, \
ni,nj,nk, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki3_loop3_bnd_##name; \
cGH const *restrict const cctki3_cctkGH = (cctkGH); \
@@ -2439,7 +2465,7 @@
cctki3_bndsize[1],cctki3_bndsize[3],cctki3_bndsize[5], \
cctki3_is_physbnd[0],cctki3_is_physbnd[2],cctki3_is_physbnd[4], \
cctki3_is_physbnd[1],cctki3_is_physbnd[3],cctki3_is_physbnd[5], \
- (istr)) { \
+ imin,imax, (istr)) { \
#define CCTK_ENDLOOP3STR_BND(name) \
} CCTK_ENDLOOP3STR_BOUNDARIES(name##_bnd); \
@@ -2456,7 +2482,7 @@
CCTK_LOOP3STR_INTBND(name, (cctkGH), \
i,j,k, \
ni,nj,nk, \
- 1) \
+ cctki3_imin_,cctki3_imax_, 1) \
#define CCTK_ENDLOOP3_INTBND(name) \
CCTK_ENDLOOP3STR_INTBND(name) \
@@ -2464,7 +2490,7 @@
#define CCTK_LOOP3STR_INTBND(name, cctkGH, \
i,j,k, \
ni,nj,nk, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki3_loop3_intbnd_##name; \
cGH const *restrict const cctki3_cctkGH = (cctkGH); \
@@ -2488,7 +2514,7 @@
cctki3_bndsize[1],cctki3_bndsize[3],cctki3_bndsize[5], \
cctki3_is_physbnd[0],cctki3_is_physbnd[2],cctki3_is_physbnd[4], \
cctki3_is_physbnd[1],cctki3_is_physbnd[3],cctki3_is_physbnd[5], \
- (istr)) { \
+ imin,imax, (istr)) { \
#define CCTK_ENDLOOP3STR_INTBND(name) \
} CCTK_ENDLOOP3STR_INTBOUNDARIES(name##_intbnd); \
@@ -2505,6 +2531,7 @@
#define CCTK_LOOP3_NORMAL_DECLARE(name) \
CCTK_LOOP3STR_NORMAL_DECLARE(name) \
+ && integer :: name/**/0_imin_, name/**/0_imax_ \
#define CCTK_LOOP3_NORMAL_OMP_PRIVATE(name) \
CCTK_LOOP3STR_NORMAL_OMP_PRIVATE(name) \
@@ -2523,7 +2550,7 @@
imin,jmin,kmin, \
imax,jmax,kmax, \
iash,jash,kash, \
- 1) \
+ name/**/0_imin_,name/**/0_imax_, 1) \
#define CCTK_ENDLOOP3_NORMAL(name) \
CCTK_ENDLOOP3STR_NORMAL(name) \
@@ -2532,6 +2559,7 @@
&& integer :: name/**/0_idir,name/**/0_jdir,name/**/0_kdir \
&& integer :: name/**/0_imin,name/**/0_jmin,name/**/0_kmin \
&& integer :: name/**/0_imax,name/**/0_jmax,name/**/0_kmax \
+ && integer :: name/**/0_iash,name/**/0_jash,name/**/0_kash \
&& integer :: name/**/0_istr \
#define CCTK_LOOP3STR_NORMAL_OMP_PRIVATE(name) \
@@ -2542,24 +2570,29 @@
i,j,k, \
ni,nj,nk, \
idir,jdir,kdir, \
- imin,jmin,kmin, \
- imax,jmax,kmax, \
+ imin_,jmin_,kmin_, \
+ imax_,jmax_,kmax_, \
iash,jash,kash, \
- istr) \
+ imin,imax, istr) \
&& name/**/0_idir = idir \
&& name/**/0_jdir = jdir \
&& name/**/0_kdir = kdir \
- && name/**/0_imin = imin \
- && name/**/0_jmin = jmin \
- && name/**/0_kmin = kmin \
- && name/**/0_imax = imax \
- && name/**/0_jmax = jmax \
- && name/**/0_kmax = kmax \
+ && name/**/0_imin = imin_ \
+ && name/**/0_jmin = jmin_ \
+ && name/**/0_kmin = kmin_ \
+ && name/**/0_imax = imax_ \
+ && name/**/0_jmax = jmax_ \
+ && name/**/0_kmax = kmax_ \
+ && name/**/0_iash = iash \
+ && name/**/0_jash = jash \
+ && name/**/0_kash = kash \
&& name/**/0_istr = istr \
- && !$omp do \
+ && imin = name/**/0_imin \
+ && imax = name/**/0_imax \
+ && !$omp do collapse(2) \
&& do k = name/**/0_kmin, name/**/0_kmax \
&& do j = name/**/0_jmin, name/**/0_jmax \
- && do i = name/**/0_imin, name/**/0_imax \
+ && do i = name/**/0_imin - modulo((imin+name/**/0_iash*(j+name/**/0_jash*(k))), name/**/0_istr), name/**/0_imax \
&& if (name/**/0_idir< 0) ni = i \
&& if (name/**/0_jdir< 0) nj = j \
&& if (name/**/0_kdir< 0) nk = k \
@@ -2579,6 +2612,7 @@
#define CCTK_LOOP3_DECLARE(name) \
CCTK_LOOP3STR_DECLARE(name) \
+ && integer :: name/**/1_imin_, name/**/1_imax_ \
#define CCTK_LOOP3_OMP_PRIVATE(name) \
CCTK_LOOP3STR_OMP_PRIVATE(name) \
@@ -2593,7 +2627,7 @@
imin,jmin,kmin, \
imax,jmax,kmax, \
iash,jash,kash, \
- 1) \
+ name/**/1_imin_,name/**/1_imax_, 1) \
#define CCTK_ENDLOOP3(name) \
CCTK_ENDLOOP3STR(name) \
@@ -2607,18 +2641,18 @@
#define CCTK_LOOP3STR(name, \
i,j,k, \
- imin,jmin,kmin, \
- imax,jmax,kmax, \
+ imin_,jmin_,kmin_, \
+ imax_,jmax_,kmax_, \
iash,jash,kash, \
- istr) \
+ imin,imax, istr) \
CCTK_LOOP3STR_NORMAL(name, \
i,j,k, \
name/**/1_ni,name/**/1_nj,name/**/1_nk, \
0,0,0, \
- imin,jmin,kmin, \
- imax,jmax,kmax, \
+ imin_,jmin_,kmin_, \
+ imax_,jmax_,kmax_, \
iash,jash,kash, \
- istr) \
+ imin,imax, istr) \
#define CCTK_ENDLOOP3STR(name) \
CCTK_ENDLOOP3STR_NORMAL(name) \
@@ -2629,6 +2663,7 @@
#define CCTK_LOOP3_INTERIOR_DECLARE(name) \
CCTK_LOOP3STR_INTERIOR_DECLARE(name) \
+ && integer :: name/**/2_imin_, name/**/2_imax_ \
#define CCTK_LOOP3_INTERIOR_OMP_PRIVATE(name) \
CCTK_LOOP3STR_INTERIOR_OMP_PRIVATE(name) \
@@ -2641,7 +2676,7 @@
i,j,k, \
iblo,jblo,kblo, \
ibhi,jbhi,kbhi, \
- 1) \
+ name/**/2_imin_,name/**/2_imax_, 1) \
#define CCTK_ENDLOOP3_INTERIOR(name) \
CCTK_ENDLOOP3STR_INTERIOR(name) \
@@ -2656,7 +2691,7 @@
i,j,k, \
iblo,jblo,kblo, \
ibhi,jbhi,kbhi, \
- istr) \
+ imin,imax, istr) \
CCTK_LOOP3STR(name/**/_interior, \
i,j,k, \
(iblo)+1, \
@@ -2666,7 +2701,7 @@
cctk_lsh(2)-(jbhi), \
cctk_lsh(3)-(kbhi), \
cctk_ash(1),cctk_ash(2),cctk_ash(3), \
- istr) \
+ imin,imax, istr) \
#define CCTK_ENDLOOP3STR_INTERIOR(name) \
CCTK_ENDLOOP3STR(name/**/_interior) \
@@ -2677,6 +2712,7 @@
#define CCTK_LOOP3_BOUNDARIES_DECLARE(name) \
CCTK_LOOP3STR_BOUNDARIES_DECLARE(name) \
+ && integer :: name/**/2_imin_, name/**/2_imax_ \
#define CCTK_LOOP3_BOUNDARIES_OMP_PRIVATE(name) \
CCTK_LOOP3STR_BOUNDARIES_OMP_PRIVATE(name) \
@@ -2695,7 +2731,7 @@
ibhi,jbhi,kbhi, \
ibboxlo,jbboxlo,kbboxlo, \
ibboxhi,jbboxhi,kbboxhi, \
- 1) \
+ name/**/2_imin_,name/**/2_imax_, 1) \
#define CCTK_ENDLOOP3_BOUNDARIES(name) \
CCTK_ENDLOOP3STR_BOUNDARIES(name) \
@@ -2721,13 +2757,12 @@
ibhi,jbhi,kbhi, \
ibboxlo,jbboxlo,kbboxlo, \
ibboxhi,jbboxhi,kbboxhi, \
- istr) \
+ imin,imax, istr) \
&& name/**/2_blo = (/ iblo,jblo,kblo /) \
&& name/**/2_bhi = (/ ibhi,jbhi,kbhi /) \
&& name/**/2_bboxlo = (/ ibboxlo,jbboxlo,kbboxlo /) \
&& name/**/2_bboxhi = (/ ibboxhi,jbboxhi,kbboxhi /) \
&& name/**/2_istr = (istr) \
- && /* Loop over all faces, edges, and corners */ \
&& do name/**/2_kdir=-1, +1 \
&& do name/**/2_jdir=-1, +1 \
&& do name/**/2_idir=-1, +1 \
@@ -2766,7 +2801,7 @@
cctk_ash(1), \
cctk_ash(2), \
cctk_ash(3), \
- name/**/2_istr) \
+ imin,imax, name/**/2_istr) \
#define CCTK_ENDLOOP3STR_BOUNDARIES(name) \
CCTK_ENDLOOP3STR_NORMAL(name/**/_boundaries) \
@@ -2781,6 +2816,7 @@
#define CCTK_LOOP3_INTBOUNDARIES_DECLARE(name) \
CCTK_LOOP3STR_INTBOUNDARIES_DECLARE(name) \
+ && integer :: name/**/2_imin_, name/**/2_imax_ \
#define CCTK_LOOP3_INTBOUNDARIES_OMP_PRIVATE(name) \
CCTK_LOOP3STR_INTBOUNDARIES_OMP_PRIVATE(name) \
@@ -2799,7 +2835,7 @@
ibhi,jbhi,kbhi, \
ibboxlo,jbboxlo,kbboxlo, \
ibboxhi,jbboxhi,kbboxhi, \
- 1) \
+ name/**/2_imin_,name/**/2_imax_, 1) \
#define CCTK_ENDLOOP3_INTBOUNDARIES(name) \
CCTK_ENDLOOP3STR_INTBOUNDARIES(name) \
@@ -2825,13 +2861,12 @@
ibhi,jbhi,kbhi, \
ibboxlo,jbboxlo,kbboxlo, \
ibboxhi,jbboxhi,kbboxhi, \
- istr) \
+ imin,imax, istr) \
&& name/**/2_blo = (/ iblo,jblo,kblo /) \
&& name/**/2_bhi = (/ ibhi,jbhi,kbhi /) \
&& name/**/2_bboxlo = (/ ibboxlo,jbboxlo,kbboxlo /) \
&& name/**/2_bboxhi = (/ ibboxhi,jbboxhi,kbboxhi /) \
&& name/**/2_istr = (istr) \
- && /* Loop over all faces, edges, and corners */ \
&& do name/**/2_kdir=-1, +1 \
&& do name/**/2_jdir=-1, +1 \
&& do name/**/2_idir=-1, +1 \
@@ -2877,7 +2912,7 @@
cctk_ash(1), \
cctk_ash(2), \
cctk_ash(3), \
- name/**/2_istr) \
+ imin,imax, name/**/2_istr) \
#define CCTK_ENDLOOP3STR_INTBOUNDARIES(name) \
CCTK_ENDLOOP3STR_NORMAL(name/**/_intboundaries) \
@@ -2892,6 +2927,7 @@
#define CCTK_LOOP3_ALL_DECLARE(name) \
CCTK_LOOP3STR_ALL_DECLARE(name) \
+ && integer :: name/**/3_imin_, name/**/3_imax_ \
#define CCTK_LOOP3_ALL_OMP_PRIVATE(name) \
CCTK_LOOP3STR_ALL_OMP_PRIVATE(name) \
@@ -2900,7 +2936,7 @@
i,j,k) \
CCTK_LOOP3STR_ALL(name, \
i,j,k, \
- 1) \
+ name/**/3_imin_,name/**/3_imax_, 1) \
#define CCTK_ENDLOOP3_ALL(name) \
CCTK_ENDLOOP3STR_ALL(name) \
@@ -2913,13 +2949,13 @@
#define CCTK_LOOP3STR_ALL(name, \
i,j,k, \
- istr) \
+ imin,imax, istr) \
CCTK_LOOP3STR(name/**/_all, \
i,j,k, \
1,1,1, \
cctk_lsh(1),cctk_lsh(2),cctk_lsh(3), \
cctk_ash(1),cctk_ash(2),cctk_ash(3), \
- istr) \
+ imin,imax, istr) \
#define CCTK_ENDLOOP3STR_ALL(name) \
CCTK_ENDLOOP3STR(name/**/_all) \
@@ -2930,6 +2966,7 @@
#define CCTK_LOOP3_INT_DECLARE(name) \
CCTK_LOOP3STR_INT_DECLARE(name) \
+ && integer :: name/**/3_imin_, name/**/3_imax_ \
#define CCTK_LOOP3_INT_OMP_PRIVATE(name) \
CCTK_LOOP3STR_INT_OMP_PRIVATE(name) \
@@ -2938,7 +2975,7 @@
i,j,k) \
CCTK_LOOP3STR_INT(name, \
i,j,k, \
- 1) \
+ name/**/3_imin_,name/**/3_imax_, 1) \
#define CCTK_ENDLOOP3_INT(name) \
CCTK_ENDLOOP3STR_INT(name) \
@@ -2956,7 +2993,7 @@
#define CCTK_LOOP3STR_INT(name, \
i,j,k, \
- istr) \
+ imin,imax, istr) \
&& !$omp single \
&& name/**/3_ierr = GetBoundarySizesAndTypes \
(cctkGH, 6, name/**/3_bndsize, name/**/3_is_ghostbnd, name/**/3_is_symbnd, name/**/3_is_physbnd) \
@@ -2965,7 +3002,7 @@
i,j,k, \
name/**/3_bndsize(1+1),name/**/3_bndsize(3+1),name/**/3_bndsize(5+1), \
name/**/3_bndsize(2),name/**/3_bndsize(4),name/**/3_bndsize(6), \
- (istr)) \
+ imin,imax, (istr)) \
#define CCTK_ENDLOOP3STR_INT(name) \
CCTK_ENDLOOP3STR_INTERIOR(name/**/int) \
@@ -2976,6 +3013,7 @@
#define CCTK_LOOP3_BND_DECLARE(name) \
CCTK_LOOP3STR_BND_DECLARE(name) \
+ && integer :: name/**/3_imin_, name/**/3_imax_ \
#define CCTK_LOOP3_BND_OMP_PRIVATE(name) \
CCTK_LOOP3STR_BND_OMP_PRIVATE(name) \
@@ -2986,7 +3024,7 @@
CCTK_LOOP3STR_BND(name, \
i,j,k, \
ni,nj,nk, \
- 1) \
+ name/**/3_imin_,name/**/3_imax_, 1) \
#define CCTK_ENDLOOP3_BND(name) \
CCTK_ENDLOOP3STR_BND(name) \
@@ -3005,7 +3043,7 @@
#define CCTK_LOOP3STR_BND(name, \
i,j,k, \
ni,nj,nk, \
- istr) \
+ imin,imax, istr) \
&& !$omp single \
&& name/**/3_ierr = GetBoundarySizesAndTypes \
(cctkGH, 6, name/**/3_bndsize, name/**/3_is_ghostbnd, name/**/3_is_symbnd, name/**/3_is_physbnd) \
@@ -3017,7 +3055,7 @@
name/**/3_bndsize(2),name/**/3_bndsize(4),name/**/3_bndsize(6), \
name/**/3_is_physbnd(1),name/**/3_is_physbnd(3),name/**/3_is_physbnd(5), \
name/**/3_is_physbnd(2),name/**/3_is_physbnd(4),name/**/3_is_physbnd(6), \
- (istr)) \
+ imin,imax, (istr)) \
#define CCTK_ENDLOOP3STR_BND(name) \
CCTK_ENDLOOP3STR_BOUNDARIES(name/**/_bnd) \
@@ -3031,6 +3069,7 @@
#define CCTK_LOOP3_INTBND_DECLARE(name) \
CCTK_LOOP3STR_INTBND_DECLARE(name) \
+ && integer :: name/**/3_imin_, name/**/3_imax_ \
#define CCTK_LOOP3_INTBND_OMP_PRIVATE(name) \
CCTK_LOOP3STR_INTBND_OMP_PRIVATE(name) \
@@ -3041,7 +3080,7 @@
CCTK_LOOP3STR_INTBND(name, \
i,j,k, \
ni,nj,nk, \
- 1) \
+ name/**/3_imin_,name/**/3_imax_, 1) \
#define CCTK_ENDLOOP3_INTBND(name) \
CCTK_ENDLOOP3STR_INTBND(name) \
@@ -3060,7 +3099,7 @@
#define CCTK_LOOP3STR_INTBND(name, \
i,j,k, \
ni,nj,nk, \
- istr) \
+ imin,imax, istr) \
&& !$omp single \
&& name/**/3_ierr = GetBoundarySizesAndTypes \
(cctkGH, 6, name/**/3_bndsize, name/**/3_is_ghostbnd, name/**/3_is_symbnd, name/**/3_is_physbnd) \
@@ -3072,7 +3111,7 @@
name/**/3_bndsize(2),name/**/3_bndsize(4),name/**/3_bndsize(6), \
name/**/3_is_physbnd(1),name/**/3_is_physbnd(3),name/**/3_is_physbnd(5), \
name/**/3_is_physbnd(2),name/**/3_is_physbnd(4),name/**/3_is_physbnd(6), \
- (istr)) \
+ imin,imax, (istr)) \
#define CCTK_ENDLOOP3STR_INTBND(name) \
CCTK_ENDLOOP3STR_INTBOUNDARIES(name/**/_bnd) \
@@ -3101,7 +3140,7 @@
(imin),(jmin),(kmin),(lmin), \
(imax),(jmax),(kmax),(lmax), \
(iash),(jash),(kash),(lash), \
- 1) \
+ cctki0_imin_,cctki0_imax_, 1) \
#define CCTK_ENDLOOP4_NORMAL(name) \
CCTK_ENDLOOP4STR_NORMAL(name) \
@@ -3110,31 +3149,36 @@
i,j,k,l, \
ni,nj,nk,nl, \
idir,jdir,kdir,ldir, \
- imin,jmin,kmin,lmin, \
- imax,jmax,kmax,lmax, \
+ imin_,jmin_,kmin_,lmin_, \
+ imax_,jmax_,kmax_,lmax_, \
iash,jash,kash,lash, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki0_loop4_normal_##name; \
int const cctki0_idir = (idir); \
int const cctki0_jdir = (jdir); \
int const cctki0_kdir = (kdir); \
int const cctki0_ldir = (ldir); \
- int const cctki0_imin = (imin); \
- int const cctki0_jmin = (jmin); \
- int const cctki0_kmin = (kmin); \
- int const cctki0_lmin = (lmin); \
- int const cctki0_imax = (imax); \
- int const cctki0_jmax = (jmax); \
- int const cctki0_kmax = (kmax); \
- int const cctki0_lmax = (lmax); \
- int const cctki0_istr CCTK_ATTRIBUTE_UNUSED = (istr); \
- assert(cctki0_istr == 1); \
- _Pragma("omp for") \
+ int const cctki0_imin = (imin_); \
+ int const cctki0_jmin = (jmin_); \
+ int const cctki0_kmin = (kmin_); \
+ int const cctki0_lmin = (lmin_); \
+ int const cctki0_imax = (imax_); \
+ int const cctki0_jmax = (jmax_); \
+ int const cctki0_kmax = (kmax_); \
+ int const cctki0_lmax = (lmax_); \
+ int const cctki0_iash = (iash); \
+ int const cctki0_jash = (jash); \
+ int const cctki0_kash = (kash); \
+ int const cctki0_lash = (lash); \
+ int const cctki0_istr = (istr); \
+ int const imin = cctki0_imin; \
+ int const imax = cctki0_imax; \
+ _Pragma("omp for collapse(3)") \
for (int l=cctki0_lmin; l<cctki0_lmax; ++l) { \
for (int k=cctki0_kmin; k<cctki0_kmax; ++k) { \
for (int j=cctki0_jmin; j<cctki0_jmax; ++j) { \
- for (int i=cctki0_imin; i<cctki0_imax; ++i) { \
+ for (int i=cctki0_imin - (imin+cctki0_iash*(j+cctki0_jash*(k+cctki0_kash*(l)))) % cctki0_istr; i<cctki0_imax; i+=cctki0_istr) { \
int const ni CCTK_ATTRIBUTE_UNUSED = cctki0_idir<0 ? i+1 : cctki0_idir==0 ? 0 : cctki0_imax-i; \
int const nj CCTK_ATTRIBUTE_UNUSED = cctki0_jdir<0 ? j+1 : cctki0_jdir==0 ? 0 : cctki0_jmax-j; \
int const nk CCTK_ATTRIBUTE_UNUSED = cctki0_kdir<0 ? k+1 : cctki0_kdir==0 ? 0 : cctki0_kmax-k; \
@@ -3162,25 +3206,25 @@
(imin),(jmin),(kmin),(lmin), \
(imax),(jmax),(kmax),(lmax), \
(iash),(jash),(kash),(lash), \
- 1) \
+ cctki1_imin_,cctki1_imax_, 1) \
#define CCTK_ENDLOOP4(name) \
CCTK_ENDLOOP4STR(name) \
#define CCTK_LOOP4STR(name, \
i,j,k,l, \
- imin,jmin,kmin,lmin, \
- imax,jmax,kmax,lmax, \
+ imin_,jmin_,kmin_,lmin_, \
+ imax_,jmax_,kmax_,lmax_, \
iash,jash,kash,lash, \
- istr) \
+ imin,imax, istr) \
CCTK_LOOP4STR_NORMAL(name, \
i,j,k,l, \
cctki1_ni,cctki1_nj,cctki1_nk,cctki1_nl, \
0,0,0,0, \
- imin,jmin,kmin,lmin, \
- imax,jmax,kmax,lmax, \
+ imin_,jmin_,kmin_,lmin_, \
+ imax_,jmax_,kmax_,lmax_, \
iash,jash,kash,lash, \
- istr) \
+ imin,imax, istr) \
#define CCTK_ENDLOOP4STR(name) \
CCTK_ENDLOOP4STR_NORMAL(name) \
@@ -3197,7 +3241,7 @@
i,j,k,l, \
(iblo),(jblo),(kblo),(lblo), \
(ibhi),(jbhi),(kbhi),(lbhi), \
- 1) \
+ cctki2_imin_,cctki2_imax_, 1) \
#define CCTK_ENDLOOP4_INTERIOR(name) \
CCTK_ENDLOOP4STR_INTERIOR(name) \
@@ -3206,7 +3250,7 @@
i,j,k,l, \
iblo,jblo,kblo,lblo, \
ibhi,jbhi,kbhi,lbhi, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki2_loop4_interior_##name; \
cGH const *restrict const cctki2_cctkGH = (cctkGH); \
@@ -3226,7 +3270,7 @@
cctki2_cctkGH->cctk_ash[1], \
cctki2_cctkGH->cctk_ash[2], \
cctki2_cctkGH->cctk_ash[3], \
- (istr)) { \
+ imin,imax, (istr)) { \
#define CCTK_ENDLOOP4STR_INTERIOR(name) \
} CCTK_ENDLOOP4STR(name##_interior); \
@@ -3251,7 +3295,7 @@
(ibhi),(jbhi),(kbhi),(lbhi), \
(ibboxlo),(jbboxlo),(kbboxlo),(lbboxlo), \
(ibboxhi),(jbboxhi),(kbboxhi),(lbboxhi), \
- 1) \
+ cctki2_imin_,cctki2_imax_, 1) \
#define CCTK_ENDLOOP4_BOUNDARIES(name) \
CCTK_ENDLOOP4STR_BOUNDARIES(name) \
@@ -3263,7 +3307,7 @@
ibhi,jbhi,kbhi,lbhi, \
ibboxlo,jbboxlo,kbboxlo,lbboxlo, \
ibboxhi,jbboxhi,kbboxhi,lbboxhi, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki2_loop4_boundaries_##name; \
cGH const *restrict const cctki2_cctkGH = (cctkGH); \
@@ -3277,7 +3321,6 @@
int const cctki2_bbox[] = { (ibboxlo), (ibboxhi),(jbboxlo), (jbboxhi),(kbboxlo), (kbboxhi),(lbboxlo), (lbboxhi) }; \
int const cctki2_lsh[] = { cctki2_cctkGH->cctk_lsh[0],cctki2_cctkGH->cctk_lsh[1],cctki2_cctkGH->cctk_lsh[2],cctki2_cctkGH->cctk_lsh[3] }; \
int const cctki2_istr CCTK_ATTRIBUTE_UNUSED = (istr); \
- /* Loop over all faces, edges, and corners */ \
for (int cctki2_ldir=-1; cctki2_ldir<=+1; ++cctki2_ldir) { \
for (int cctki2_kdir=-1; cctki2_kdir<=+1; ++cctki2_kdir) { \
for (int cctki2_jdir=-1; cctki2_jdir<=+1; ++cctki2_jdir) { \
@@ -3310,7 +3353,7 @@
cctki2_cctkGH->cctk_ash[1], \
cctki2_cctkGH->cctk_ash[2], \
cctki2_cctkGH->cctk_ash[3], \
- cctki2_istr) { \
+ imin,imax, cctki2_istr) { \
#define CCTK_ENDLOOP4STR_BOUNDARIES(name) \
} CCTK_ENDLOOP4STR_NORMAL(name##_boundaries); \
@@ -3340,7 +3383,7 @@
(ibhi),(jbhi),(kbhi),(lbhi), \
(ibboxlo),(jbboxlo),(kbboxlo),(lbboxlo), \
(ibboxhi),(jbboxhi),(kbboxhi),(lbboxhi), \
- 1) \
+ cctki2_imin_,cctki2_imax_, 1) \
#define CCTK_ENDLOOP4_INTBOUNDARIES(name) \
CCTK_ENDLOOP4STR_INTBOUNDARIES(name) \
@@ -3352,7 +3395,7 @@
ibhi,jbhi,kbhi,lbhi, \
ibboxlo,jbboxlo,kbboxlo,lbboxlo, \
ibboxhi,jbboxhi,kbboxhi,lbboxhi, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki2_loop4_intboundaries_##name; \
cGH const *restrict const cctki2_cctkGH = (cctkGH); \
@@ -3366,7 +3409,6 @@
int const cctki2_bbox[] = { (ibboxlo), (ibboxhi),(jbboxlo), (jbboxhi),(kbboxlo), (kbboxhi),(lbboxlo), (lbboxhi) }; \
int const cctki2_lsh[] = { cctki2_cctkGH->cctk_lsh[0],cctki2_cctkGH->cctk_lsh[1],cctki2_cctkGH->cctk_lsh[2],cctki2_cctkGH->cctk_lsh[3] }; \
int const cctki2_istr CCTK_ATTRIBUTE_UNUSED = (istr); \
- /* Loop over all faces, edges, and corners */ \
for (int cctki2_ldir=-1; cctki2_ldir<=+1; ++cctki2_ldir) { \
for (int cctki2_kdir=-1; cctki2_kdir<=+1; ++cctki2_kdir) { \
for (int cctki2_jdir=-1; cctki2_jdir<=+1; ++cctki2_jdir) { \
@@ -3404,7 +3446,7 @@
cctki2_cctkGH->cctk_ash[1], \
cctki2_cctkGH->cctk_ash[2], \
cctki2_cctkGH->cctk_ash[3], \
- cctki2_istr) { \
+ imin,imax, cctki2_istr) { \
#define CCTK_ENDLOOP4STR_INTBOUNDARIES(name) \
} CCTK_ENDLOOP4STR_NORMAL(name##_intboundaries); \
@@ -3424,14 +3466,14 @@
i,j,k,l) \
CCTK_LOOP4STR_ALL(name, (cctkGH), \
i,j,k,l, \
- 1) \
+ cctki3_imin_,cctki3_imax_, 1) \
#define CCTK_ENDLOOP4_ALL(name) \
CCTK_ENDLOOP4STR_ALL(name) \
#define CCTK_LOOP4STR_ALL(name, cctkGH, \
i,j,k,l, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki3_loop4_all_##name; \
cGH const *restrict const cctki3_cctkGH = (cctkGH); \
@@ -3451,7 +3493,7 @@
cctki3_cctkGH->cctk_ash[1], \
cctki3_cctkGH->cctk_ash[2], \
cctki3_cctkGH->cctk_ash[3], \
- (istr)) { \
+ imin,imax, (istr)) { \
#define CCTK_ENDLOOP4STR_ALL(name) \
} CCTK_ENDLOOP4STR(name##_all); \
@@ -3466,14 +3508,14 @@
i,j,k,l) \
CCTK_LOOP4STR_INT(name, (cctkGH), \
i,j,k,l, \
- 1) \
+ cctki3_imin_,cctki3_imax_, 1) \
#define CCTK_ENDLOOP4_INT(name) \
CCTK_ENDLOOP4STR_INT(name) \
#define CCTK_LOOP4STR_INT(name, cctkGH, \
i,j,k,l, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki3_loop4_int_##name; \
cGH const *restrict const cctki3_cctkGH = (cctkGH); \
@@ -3494,7 +3536,7 @@
i,j,k,l, \
cctki3_bndsize[0],cctki3_bndsize[2],cctki3_bndsize[4],cctki3_bndsize[6], \
cctki3_bndsize[1],cctki3_bndsize[3],cctki3_bndsize[5],cctki3_bndsize[7], \
- (istr)) { \
+ imin,imax, (istr)) { \
#define CCTK_ENDLOOP4STR_INT(name) \
} CCTK_ENDLOOP4STR_INTERIOR(name##_int); \
@@ -3511,7 +3553,7 @@
CCTK_LOOP4STR_BND(name, (cctkGH), \
i,j,k,l, \
ni,nj,nk,nl, \
- 1) \
+ cctki3_imin_,cctki3_imax_, 1) \
#define CCTK_ENDLOOP4_BND(name) \
CCTK_ENDLOOP4STR_BND(name) \
@@ -3519,7 +3561,7 @@
#define CCTK_LOOP4STR_BND(name, cctkGH, \
i,j,k,l, \
ni,nj,nk,nl, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki3_loop4_bnd_##name; \
cGH const *restrict const cctki3_cctkGH = (cctkGH); \
@@ -3543,7 +3585,7 @@
cctki3_bndsize[1],cctki3_bndsize[3],cctki3_bndsize[5],cctki3_bndsize[7], \
cctki3_is_physbnd[0],cctki3_is_physbnd[2],cctki3_is_physbnd[4],cctki3_is_physbnd[6], \
cctki3_is_physbnd[1],cctki3_is_physbnd[3],cctki3_is_physbnd[5],cctki3_is_physbnd[7], \
- (istr)) { \
+ imin,imax, (istr)) { \
#define CCTK_ENDLOOP4STR_BND(name) \
} CCTK_ENDLOOP4STR_BOUNDARIES(name##_bnd); \
@@ -3560,7 +3602,7 @@
CCTK_LOOP4STR_INTBND(name, (cctkGH), \
i,j,k,l, \
ni,nj,nk,nl, \
- 1) \
+ cctki3_imin_,cctki3_imax_, 1) \
#define CCTK_ENDLOOP4_INTBND(name) \
CCTK_ENDLOOP4STR_INTBND(name) \
@@ -3568,7 +3610,7 @@
#define CCTK_LOOP4STR_INTBND(name, cctkGH, \
i,j,k,l, \
ni,nj,nk,nl, \
- istr) \
+ imin,imax, istr) \
do { \
typedef int cctki3_loop4_intbnd_##name; \
cGH const *restrict const cctki3_cctkGH = (cctkGH); \
@@ -3592,7 +3634,7 @@
cctki3_bndsize[1],cctki3_bndsize[3],cctki3_bndsize[5],cctki3_bndsize[7], \
cctki3_is_physbnd[0],cctki3_is_physbnd[2],cctki3_is_physbnd[4],cctki3_is_physbnd[6], \
cctki3_is_physbnd[1],cctki3_is_physbnd[3],cctki3_is_physbnd[5],cctki3_is_physbnd[7], \
- (istr)) { \
+ imin,imax, (istr)) { \
#define CCTK_ENDLOOP4STR_INTBND(name) \
} CCTK_ENDLOOP4STR_INTBOUNDARIES(name##_intbnd); \
@@ -3609,6 +3651,7 @@
#define CCTK_LOOP4_NORMAL_DECLARE(name) \
CCTK_LOOP4STR_NORMAL_DECLARE(name) \
+ && integer :: name/**/0_imin_, name/**/0_imax_ \
#define CCTK_LOOP4_NORMAL_OMP_PRIVATE(name) \
CCTK_LOOP4STR_NORMAL_OMP_PRIVATE(name) \
@@ -3627,7 +3670,7 @@
imin,jmin,kmin,lmin, \
imax,jmax,kmax,lmax, \
iash,jash,kash,lash, \
- 1) \
+ name/**/0_imin_,name/**/0_imax_, 1) \
#define CCTK_ENDLOOP4_NORMAL(name) \
CCTK_ENDLOOP4STR_NORMAL(name) \
@@ -3636,6 +3679,7 @@
&& integer :: name/**/0_idir,name/**/0_jdir,name/**/0_kdir,name/**/0_ldir \
&& integer :: name/**/0_imin,name/**/0_jmin,name/**/0_kmin,name/**/0_lmin \
&& integer :: name/**/0_imax,name/**/0_jmax,name/**/0_kmax,name/**/0_lmax \
+ && integer :: name/**/0_iash,name/**/0_jash,name/**/0_kash,name/**/0_lash \
&& integer :: name/**/0_istr \
#define CCTK_LOOP4STR_NORMAL_OMP_PRIVATE(name) \
@@ -3646,28 +3690,34 @@
i,j,k,l, \
ni,nj,nk,nl, \
idir,jdir,kdir,ldir, \
- imin,jmin,kmin,lmin, \
- imax,jmax,kmax,lmax, \
+ imin_,jmin_,kmin_,lmin_, \
+ imax_,jmax_,kmax_,lmax_, \
iash,jash,kash,lash, \
- istr) \
+ imin,imax, istr) \
&& name/**/0_idir = idir \
&& name/**/0_jdir = jdir \
&& name/**/0_kdir = kdir \
&& name/**/0_ldir = ldir \
- && name/**/0_imin = imin \
- && name/**/0_jmin = jmin \
- && name/**/0_kmin = kmin \
- && name/**/0_lmin = lmin \
- && name/**/0_imax = imax \
- && name/**/0_jmax = jmax \
- && name/**/0_kmax = kmax \
- && name/**/0_lmax = lmax \
+ && name/**/0_imin = imin_ \
+ && name/**/0_jmin = jmin_ \
+ && name/**/0_kmin = kmin_ \
+ && name/**/0_lmin = lmin_ \
+ && name/**/0_imax = imax_ \
+ && name/**/0_jmax = jmax_ \
+ && name/**/0_kmax = kmax_ \
+ && name/**/0_lmax = lmax_ \
+ && name/**/0_iash = iash \
+ && name/**/0_jash = jash \
+ && name/**/0_kash = kash \
+ && name/**/0_lash = lash \
&& name/**/0_istr = istr \
- && !$omp do \
+ && imin = name/**/0_imin \
+ && imax = name/**/0_imax \
+ && !$omp do collapse(3) \
&& do l = name/**/0_lmin, name/**/0_lmax \
&& do k = name/**/0_kmin, name/**/0_kmax \
&& do j = name/**/0_jmin, name/**/0_jmax \
- && do i = name/**/0_imin, name/**/0_imax \
+ && do i = name/**/0_imin - modulo((imin+name/**/0_iash*(j+name/**/0_jash*(k+name/**/0_kash*(l)))), name/**/0_istr), name/**/0_imax \
&& if (name/**/0_idir< 0) ni = i \
&& if (name/**/0_jdir< 0) nj = j \
&& if (name/**/0_kdir< 0) nk = k \
@@ -3691,6 +3741,7 @@
#define CCTK_LOOP4_DECLARE(name) \
CCTK_LOOP4STR_DECLARE(name) \
+ && integer :: name/**/1_imin_, name/**/1_imax_ \
#define CCTK_LOOP4_OMP_PRIVATE(name) \
CCTK_LOOP4STR_OMP_PRIVATE(name) \
@@ -3705,7 +3756,7 @@
imin,jmin,kmin,lmin, \
imax,jmax,kmax,lmax, \
iash,jash,kash,lash, \
- 1) \
+ name/**/1_imin_,name/**/1_imax_, 1) \
#define CCTK_ENDLOOP4(name) \
CCTK_ENDLOOP4STR(name) \
@@ -3719,18 +3770,18 @@
#define CCTK_LOOP4STR(name, \
i,j,k,l, \
- imin,jmin,kmin,lmin, \
- imax,jmax,kmax,lmax, \
+ imin_,jmin_,kmin_,lmin_, \
+ imax_,jmax_,kmax_,lmax_, \
iash,jash,kash,lash, \
- istr) \
+ imin,imax, istr) \
CCTK_LOOP4STR_NORMAL(name, \
i,j,k,l, \
name/**/1_ni,name/**/1_nj,name/**/1_nk,name/**/1_nl, \
0,0,0,0, \
- imin,jmin,kmin,lmin, \
- imax,jmax,kmax,lmax, \
+ imin_,jmin_,kmin_,lmin_, \
+ imax_,jmax_,kmax_,lmax_, \
iash,jash,kash,lash, \
- istr) \
+ imin,imax, istr) \
#define CCTK_ENDLOOP4STR(name) \
CCTK_ENDLOOP4STR_NORMAL(name) \
@@ -3741,6 +3792,7 @@
#define CCTK_LOOP4_INTERIOR_DECLARE(name) \
CCTK_LOOP4STR_INTERIOR_DECLARE(name) \
+ && integer :: name/**/2_imin_, name/**/2_imax_ \
#define CCTK_LOOP4_INTERIOR_OMP_PRIVATE(name) \
CCTK_LOOP4STR_INTERIOR_OMP_PRIVATE(name) \
@@ -3753,7 +3805,7 @@
i,j,k,l, \
iblo,jblo,kblo,lblo, \
ibhi,jbhi,kbhi,lbhi, \
- 1) \
+ name/**/2_imin_,name/**/2_imax_, 1) \
#define CCTK_ENDLOOP4_INTERIOR(name) \
CCTK_ENDLOOP4STR_INTERIOR(name) \
@@ -3768,7 +3820,7 @@
i,j,k,l, \
iblo,jblo,kblo,lblo, \
ibhi,jbhi,kbhi,lbhi, \
- istr) \
+ imin,imax, istr) \
CCTK_LOOP4STR(name/**/_interior, \
i,j,k,l, \
(iblo)+1, \
@@ -3780,7 +3832,7 @@
cctk_lsh(3)-(kbhi), \
cctk_lsh(4)-(lbhi), \
cctk_ash(1),cctk_ash(2),cctk_ash(3),cctk_ash(4), \
- istr) \
+ imin,imax, istr) \
#define CCTK_ENDLOOP4STR_INTERIOR(name) \
CCTK_ENDLOOP4STR(name/**/_interior) \
@@ -3791,6 +3843,7 @@
#define CCTK_LOOP4_BOUNDARIES_DECLARE(name) \
CCTK_LOOP4STR_BOUNDARIES_DECLARE(name) \
+ && integer :: name/**/2_imin_, name/**/2_imax_ \
#define CCTK_LOOP4_BOUNDARIES_OMP_PRIVATE(name) \
CCTK_LOOP4STR_BOUNDARIES_OMP_PRIVATE(name) \
@@ -3809,7 +3862,7 @@
ibhi,jbhi,kbhi,lbhi, \
ibboxlo,jbboxlo,kbboxlo,lbboxlo, \
ibboxhi,jbboxhi,kbboxhi,lbboxhi, \
- 1) \
+ name/**/2_imin_,name/**/2_imax_, 1) \
#define CCTK_ENDLOOP4_BOUNDARIES(name) \
CCTK_ENDLOOP4STR_BOUNDARIES(name) \
@@ -3836,13 +3889,12 @@
ibhi,jbhi,kbhi,lbhi, \
ibboxlo,jbboxlo,kbboxlo,lbboxlo, \
ibboxhi,jbboxhi,kbboxhi,lbboxhi, \
- istr) \
+ imin,imax, istr) \
&& name/**/2_blo = (/ iblo,jblo,kblo,lblo /) \
&& name/**/2_bhi = (/ ibhi,jbhi,kbhi,lbhi /) \
&& name/**/2_bboxlo = (/ ibboxlo,jbboxlo,kbboxlo,lbboxlo /) \
&& name/**/2_bboxhi = (/ ibboxhi,jbboxhi,kbboxhi,lbboxhi /) \
&& name/**/2_istr = (istr) \
- && /* Loop over all faces, edges, and corners */ \
&& do name/**/2_ldir=-1, +1 \
&& do name/**/2_kdir=-1, +1 \
&& do name/**/2_jdir=-1, +1 \
@@ -3891,7 +3943,7 @@
cctk_ash(2), \
cctk_ash(3), \
cctk_ash(4), \
- name/**/2_istr) \
+ imin,imax, name/**/2_istr) \
#define CCTK_ENDLOOP4STR_BOUNDARIES(name) \
CCTK_ENDLOOP4STR_NORMAL(name/**/_boundaries) \
@@ -3907,6 +3959,7 @@
#define CCTK_LOOP4_INTBOUNDARIES_DECLARE(name) \
CCTK_LOOP4STR_INTBOUNDARIES_DECLARE(name) \
+ && integer :: name/**/2_imin_, name/**/2_imax_ \
#define CCTK_LOOP4_INTBOUNDARIES_OMP_PRIVATE(name) \
CCTK_LOOP4STR_INTBOUNDARIES_OMP_PRIVATE(name) \
@@ -3925,7 +3978,7 @@
ibhi,jbhi,kbhi,lbhi, \
ibboxlo,jbboxlo,kbboxlo,lbboxlo, \
ibboxhi,jbboxhi,kbboxhi,lbboxhi, \
- 1) \
+ name/**/2_imin_,name/**/2_imax_, 1) \
#define CCTK_ENDLOOP4_INTBOUNDARIES(name) \
CCTK_ENDLOOP4STR_INTBOUNDARIES(name) \
@@ -3952,13 +4005,12 @@
ibhi,jbhi,kbhi,lbhi, \
ibboxlo,jbboxlo,kbboxlo,lbboxlo, \
ibboxhi,jbboxhi,kbboxhi,lbboxhi, \
- istr) \
+ imin,imax, istr) \
&& name/**/2_blo = (/ iblo,jblo,kblo,lblo /) \
&& name/**/2_bhi = (/ ibhi,jbhi,kbhi,lbhi /) \
&& name/**/2_bboxlo = (/ ibboxlo,jbboxlo,kbboxlo,lbboxlo /) \
&& name/**/2_bboxhi = (/ ibboxhi,jbboxhi,kbboxhi,lbboxhi /) \
&& name/**/2_istr = (istr) \
- && /* Loop over all faces, edges, and corners */ \
&& do name/**/2_ldir=-1, +1 \
&& do name/**/2_kdir=-1, +1 \
&& do name/**/2_jdir=-1, +1 \
@@ -4016,7 +4068,7 @@
cctk_ash(2), \
cctk_ash(3), \
cctk_ash(4), \
- name/**/2_istr) \
+ imin,imax, name/**/2_istr) \
#define CCTK_ENDLOOP4STR_INTBOUNDARIES(name) \
CCTK_ENDLOOP4STR_NORMAL(name/**/_intboundaries) \
@@ -4032,6 +4084,7 @@
#define CCTK_LOOP4_ALL_DECLARE(name) \
CCTK_LOOP4STR_ALL_DECLARE(name) \
+ && integer :: name/**/3_imin_, name/**/3_imax_ \
#define CCTK_LOOP4_ALL_OMP_PRIVATE(name) \
CCTK_LOOP4STR_ALL_OMP_PRIVATE(name) \
@@ -4040,7 +4093,7 @@
i,j,k,l) \
CCTK_LOOP4STR_ALL(name, \
i,j,k,l, \
- 1) \
+ name/**/3_imin_,name/**/3_imax_, 1) \
#define CCTK_ENDLOOP4_ALL(name) \
CCTK_ENDLOOP4STR_ALL(name) \
@@ -4053,13 +4106,13 @@
#define CCTK_LOOP4STR_ALL(name, \
i,j,k,l, \
- istr) \
+ imin,imax, istr) \
CCTK_LOOP4STR(name/**/_all, \
i,j,k,l, \
1,1,1,1, \
cctk_lsh(1),cctk_lsh(2),cctk_lsh(3),cctk_lsh(4), \
cctk_ash(1),cctk_ash(2),cctk_ash(3),cctk_ash(4), \
- istr) \
+ imin,imax, istr) \
#define CCTK_ENDLOOP4STR_ALL(name) \
CCTK_ENDLOOP4STR(name/**/_all) \
@@ -4070,6 +4123,7 @@
#define CCTK_LOOP4_INT_DECLARE(name) \
CCTK_LOOP4STR_INT_DECLARE(name) \
+ && integer :: name/**/3_imin_, name/**/3_imax_ \
#define CCTK_LOOP4_INT_OMP_PRIVATE(name) \
CCTK_LOOP4STR_INT_OMP_PRIVATE(name) \
@@ -4078,7 +4132,7 @@
i,j,k,l) \
CCTK_LOOP4STR_INT(name, \
i,j,k,l, \
- 1) \
+ name/**/3_imin_,name/**/3_imax_, 1) \
#define CCTK_ENDLOOP4_INT(name) \
CCTK_ENDLOOP4STR_INT(name) \
@@ -4096,7 +4150,7 @@
#define CCTK_LOOP4STR_INT(name, \
i,j,k,l, \
- istr) \
+ imin,imax, istr) \
&& !$omp single \
&& name/**/3_ierr = GetBoundarySizesAndTypes \
(cctkGH, 8, name/**/3_bndsize, name/**/3_is_ghostbnd, name/**/3_is_symbnd, name/**/3_is_physbnd) \
@@ -4105,7 +4159,7 @@
i,j,k,l, \
name/**/3_bndsize(1+1),name/**/3_bndsize(3+1),name/**/3_bndsize(5+1),name/**/3_bndsize(7+1), \
name/**/3_bndsize(2),name/**/3_bndsize(4),name/**/3_bndsize(6),name/**/3_bndsize(8), \
- (istr)) \
+ imin,imax, (istr)) \
#define CCTK_ENDLOOP4STR_INT(name) \
CCTK_ENDLOOP4STR_INTERIOR(name/**/int) \
@@ -4116,6 +4170,7 @@
#define CCTK_LOOP4_BND_DECLARE(name) \
CCTK_LOOP4STR_BND_DECLARE(name) \
+ && integer :: name/**/3_imin_, name/**/3_imax_ \
#define CCTK_LOOP4_BND_OMP_PRIVATE(name) \
CCTK_LOOP4STR_BND_OMP_PRIVATE(name) \
@@ -4126,7 +4181,7 @@
CCTK_LOOP4STR_BND(name, \
i,j,k,l, \
ni,nj,nk,nl, \
- 1) \
+ name/**/3_imin_,name/**/3_imax_, 1) \
#define CCTK_ENDLOOP4_BND(name) \
CCTK_ENDLOOP4STR_BND(name) \
@@ -4145,7 +4200,7 @@
#define CCTK_LOOP4STR_BND(name, \
i,j,k,l, \
ni,nj,nk,nl, \
- istr) \
+ imin,imax, istr) \
&& !$omp single \
&& name/**/3_ierr = GetBoundarySizesAndTypes \
(cctkGH, 8, name/**/3_bndsize, name/**/3_is_ghostbnd, name/**/3_is_symbnd, name/**/3_is_physbnd) \
@@ -4157,7 +4212,7 @@
name/**/3_bndsize(2),name/**/3_bndsize(4),name/**/3_bndsize(6),name/**/3_bndsize(8), \
name/**/3_is_physbnd(1),name/**/3_is_physbnd(3),name/**/3_is_physbnd(5),name/**/3_is_physbnd(7), \
name/**/3_is_physbnd(2),name/**/3_is_physbnd(4),name/**/3_is_physbnd(6),name/**/3_is_physbnd(8), \
- (istr)) \
+ imin,imax, (istr)) \
#define CCTK_ENDLOOP4STR_BND(name) \
CCTK_ENDLOOP4STR_BOUNDARIES(name/**/_bnd) \
@@ -4171,6 +4226,7 @@
#define CCTK_LOOP4_INTBND_DECLARE(name) \
CCTK_LOOP4STR_INTBND_DECLARE(name) \
+ && integer :: name/**/3_imin_, name/**/3_imax_ \
#define CCTK_LOOP4_INTBND_OMP_PRIVATE(name) \
CCTK_LOOP4STR_INTBND_OMP_PRIVATE(name) \
@@ -4181,7 +4237,7 @@
CCTK_LOOP4STR_INTBND(name, \
i,j,k,l, \
ni,nj,nk,nl, \
- 1) \
+ name/**/3_imin_,name/**/3_imax_, 1) \
#define CCTK_ENDLOOP4_INTBND(name) \
CCTK_ENDLOOP4STR_INTBND(name) \
@@ -4200,7 +4256,7 @@
#define CCTK_LOOP4STR_INTBND(name, \
i,j,k,l, \
ni,nj,nk,nl, \
- istr) \
+ imin,imax, istr) \
&& !$omp single \
&& name/**/3_ierr = GetBoundarySizesAndTypes \
(cctkGH, 8, name/**/3_bndsize, name/**/3_is_ghostbnd, name/**/3_is_symbnd, name/**/3_is_physbnd) \
@@ -4212,7 +4268,7 @@
name/**/3_bndsize(2),name/**/3_bndsize(4),name/**/3_bndsize(6),name/**/3_bndsize(8), \
name/**/3_is_physbnd(1),name/**/3_is_physbnd(3),name/**/3_is_physbnd(5),name/**/3_is_physbnd(7), \
name/**/3_is_physbnd(2),name/**/3_is_physbnd(4),name/**/3_is_physbnd(6),name/**/3_is_physbnd(8), \
- (istr)) \
+ imin,imax, (istr)) \
#define CCTK_ENDLOOP4STR_INTBND(name) \
CCTK_ENDLOOP4STR_INTBOUNDARIES(name/**/_bnd) \
diff --git a/src/include/cctk_Loop.h.pl b/src/include/cctk_Loop.h.pl
index 479b2fba..10ade053 100755
--- a/src/include/cctk_Loop.h.pl
+++ b/src/include/cctk_Loop.h.pl
@@ -78,9 +78,16 @@ our $dim;
sub expand ($)
{
my ($str) = @_;
+ my $dimm1 = $dim-1;
my $dim2 = 2*$dim;
$str =~ s{\[DIM\]}{$dim}g;
+ $str =~ s{\[DIM-1\]}{$dimm1}g;
$str =~ s{\[2\*DIM\]}{$dim2}g;
+ if ($dim==1) {
+ $str =~ s{\[DIM==1\?([^:]*):([^]]*)\]}{$1}g;
+ } else {
+ $str =~ s{\[DIM==1\?([^:]*):([^]]*)\]}{$2}g;
+ }
return $str;
}
@@ -111,6 +118,7 @@ sub rpt ($)
my $int21 = 2*$int+1;
my $int22 = 2*$int+2;
my $char = ('i','j','k','l')[$d-1];
+ my $charm1 = ('ERROR','i','j','k')[$d-1];
my $tmp = $str;
$tmp =~ s{\[I\]}{$int}g;
$tmp =~ s{\[I\+1\]}{$int1}g;
@@ -118,6 +126,12 @@ sub rpt ($)
$tmp =~ s{\[2\*I\+1\]}{$int21}g;
$tmp =~ s{\[2\*I\+2\]}{$int22}g;
$tmp =~ s{\[C\]}{$char}g;
+ $tmp =~ s{\[C-1\]}{$charm1}g;
+ if ($d==1) {
+ $tmp =~ s{\[I==1\?([^:]*):([^]]*)\]}{$1}g;
+ } else {
+ $tmp =~ s{\[I==1\?([^:]*):([^]]*)\]}{$2}g;
+ }
push @ret, $tmp;
}
return @ret;
@@ -212,7 +226,7 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt '([C]min)').','),
(bsnl ' '.(crpt '([C]max)').','),
(bsnl ' '.(crpt '([C]ash)').','),
- (bsnl ' 1)'),
+ (bsnl ' cctki0_imin_,cctki0_imax_, 1)'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]_NORMAL(name)'),
(bsnl ' CCTK_ENDLOOP[DIM]STR_NORMAL(name)'),
@@ -221,19 +235,25 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt '[C]').','),
(bsnl ' '.(crpt 'n[C]').','),
(bsnl ' '.(crpt '[C]dir').','),
- (bsnl ' '.(crpt '[C]min').','),
- (bsnl ' '.(crpt '[C]max').','),
+ (bsnl ' '.(crpt '[C]min_').','),
+ (bsnl ' '.(crpt '[C]max_').','),
(bsnl ' '.(crpt '[C]ash').','),
- (bsnl ' istr)'),
+ (bsnl ' imin,imax, istr)'),
(bsnl ' do {'),
(bsnl ' typedef int cctki0_loop[DIM]_normal_##name;'),
(rpt (bsnl ' int const cctki0_[C]dir = ([C]dir);')),
- (rpt (bsnl ' int const cctki0_[C]min = ([C]min);')),
- (rpt (bsnl ' int const cctki0_[C]max = ([C]max);')),
- (bsnl ' int const cctki0_istr CCTK_ATTRIBUTE_UNUSED = (istr);'),
- (bsnl ' assert(cctki0_istr == 1);'),
- (bsnl ' _Pragma("omp for")'), # collapse([DIM])
- (reverse (rpt (bsnl ' for (int [C]=cctki0_[C]min; [C]<cctki0_[C]max; ++[C]) {'))),
+ (rpt (bsnl ' int const cctki0_[C]min = ([C]min_);')),
+ (rpt (bsnl ' int const cctki0_[C]max = ([C]max_);')),
+ (rpt (bsnl ' int const cctki0_[C]ash = ([C]ash);')),
+ (bsnl ' int const cctki0_istr = (istr);'),
+ # Export loop bounds in the i direction
+ (bsnl ' int const imin = cctki0_imin;'),
+ (bsnl ' int const imax = cctki0_imax;'),
+ (bsnl ' _Pragma("omp for[DIM==1?: collapse([DIM-1])]")'),
+ (reverse (rpt (bsnl (' for (int [C]=cctki0_[C]min' .
+ # Align i-loop to vector size
+ '[I==1? - ' . (sep '', rpt '[I==1?(imin:+cctki0_[C-1]ash*([C]]') . (sep '', rpt ')') . ' % cctki0_istr:]' .
+ '; [C]<cctki0_[C]max; [I==1?[C]+=cctki0_[C]str:++[C]]) {')))),
(rpt (bsnl ' int const n[C] CCTK_ATTRIBUTE_UNUSED = cctki0_[C]dir<0 ? [C]+1 : cctki0_[C]dir==0 ? 0 : cctki0_[C]max-[C];')),
(bsnl ' {'),
(nl ''),
@@ -255,25 +275,25 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt '([C]min)').','),
(bsnl ' '.(crpt '([C]max)').','),
(bsnl ' '.(crpt '([C]ash)').','),
- (bsnl ' 1)'),
+ (bsnl ' cctki1_imin_,cctki1_imax_, 1)'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM](name)'),
(bsnl ' CCTK_ENDLOOP[DIM]STR(name)'),
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]STR(name,'),
(bsnl ' '.(crpt '[C]').','),
- (bsnl ' '.(crpt '[C]min').','),
- (bsnl ' '.(crpt '[C]max').','),
+ (bsnl ' '.(crpt '[C]min_').','),
+ (bsnl ' '.(crpt '[C]max_').','),
(bsnl ' '.(crpt '[C]ash').','),
- (bsnl ' istr)'),
+ (bsnl ' imin,imax, istr)'),
(bsnl ' CCTK_LOOP[DIM]STR_NORMAL(name,'),
(bsnl ' '.(crpt '[C]').','),
(bsnl ' '.(crpt 'cctki1_n[C]').','),
(bsnl ' '.(crpt '0').','),
- (bsnl ' '.(crpt '[C]min').','),
- (bsnl ' '.(crpt '[C]max').','),
+ (bsnl ' '.(crpt '[C]min_').','),
+ (bsnl ' '.(crpt '[C]max_').','),
(bsnl ' '.(crpt '[C]ash').','),
- (bsnl ' istr)'),
+ (bsnl ' imin,imax, istr)'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]STR(name)'),
(bsnl ' CCTK_ENDLOOP[DIM]STR_NORMAL(name)'),
@@ -290,7 +310,7 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt '[C]').','),
(bsnl ' '.(crpt '([C]blo)').','),
(bsnl ' '.(crpt '([C]bhi)').','),
- (bsnl ' 1)'),
+ (bsnl ' cctki2_imin_,cctki2_imax_, 1)'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]_INTERIOR(name)'),
(bsnl ' CCTK_ENDLOOP[DIM]STR_INTERIOR(name)'),
@@ -299,7 +319,7 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt '[C]').','),
(bsnl ' '.(crpt '[C]blo').','),
(bsnl ' '.(crpt '[C]bhi').','),
- (bsnl ' istr)'),
+ (bsnl ' imin,imax, istr)'),
(bsnl ' do {'),
(bsnl ' typedef int cctki2_loop[DIM]_interior_##name;'),
(bsnl ' cGH const *restrict const cctki2_cctkGH = (cctkGH);'),
@@ -313,7 +333,7 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt '([C]blo)').','),
(rpt (bsnl ' cctki2_cctkGH->cctk_lsh[[I]]-([C]bhi),')),
(rpt (bsnl ' cctki2_cctkGH->cctk_ash[[I]],')),
- (bsnl ' (istr)) {'),
+ (bsnl ' imin,imax, (istr)) {'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]STR_INTERIOR(name)'),
(bsnl ' } CCTK_ENDLOOP[DIM]STR(name##_interior);'),
@@ -338,7 +358,7 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt '([C]bhi)').','),
(bsnl ' '.(crpt '([C]bboxlo)').','),
(bsnl ' '.(crpt '([C]bboxhi)').','),
- (bsnl ' 1)'),
+ (bsnl ' cctki2_imin_,cctki2_imax_, 1)'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]_BOUNDARIES(name)'),
(bsnl ' CCTK_ENDLOOP[DIM]STR_BOUNDARIES(name)'),
@@ -350,7 +370,7 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt '[C]bhi').','),
(bsnl ' '.(crpt '[C]bboxlo').','),
(bsnl ' '.(crpt '[C]bboxhi').','),
- (bsnl ' istr)'),
+ (bsnl ' imin,imax, istr)'),
(bsnl ' do {'),
(bsnl ' typedef int cctki2_loop[DIM]_boundaries_##name;'),
(bsnl ' cGH const *restrict const cctki2_cctkGH = (cctkGH);'),
@@ -364,7 +384,7 @@ for $dim (1,2,3,4) {
(bsnl ' int const cctki2_bbox[] = { '.(crpt '([C]bboxlo), ([C]bboxhi)').' };'),
(bsnl ' int const cctki2_lsh[] = { '.(crpt 'cctki2_cctkGH->cctk_lsh[[I]]').' };'),
(bsnl ' int const cctki2_istr CCTK_ATTRIBUTE_UNUSED = (istr);'),
- (bsnl ' /* Loop over all faces, edges, and corners */'),
+ # Loop over all faces, edges, and corners
(reverse (rpt (bsnl ' for (int cctki2_[C]dir=-1; cctki2_[C]dir<=+1; ++cctki2_[C]dir) {'))),
(bsnl ' int cctki2_any_bbox ='),
(bsnlsep [rpt ' (cctki2_[C]dir==-1 ? cctki2_bbox[[2*I]] : 0) || (cctki2_[C]dir==+1 ? cctki2_bbox[[2*I+1]] : 0)'], '||', ';'),
@@ -382,7 +402,7 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt 'cctki2_bmin[[I]]').','),
(bsnl ' '.(crpt 'cctki2_bmax[[I]]').','),
(rpt (bsnl ' cctki2_cctkGH->cctk_ash[[I]],')),
- (bsnl ' cctki2_istr) {'),
+ (bsnl ' imin,imax, cctki2_istr) {'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]STR_BOUNDARIES(name)'),
(bsnl ' } CCTK_ENDLOOP[DIM]STR_NORMAL(name##_boundaries);'),
@@ -409,7 +429,7 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt '([C]bhi)').','),
(bsnl ' '.(crpt '([C]bboxlo)').','),
(bsnl ' '.(crpt '([C]bboxhi)').','),
- (bsnl ' 1)'),
+ (bsnl ' cctki2_imin_,cctki2_imax_, 1)'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]_INTBOUNDARIES(name)'),
(bsnl ' CCTK_ENDLOOP[DIM]STR_INTBOUNDARIES(name)'),
@@ -421,7 +441,7 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt '[C]bhi').','),
(bsnl ' '.(crpt '[C]bboxlo').','),
(bsnl ' '.(crpt '[C]bboxhi').','),
- (bsnl ' istr)'),
+ (bsnl ' imin,imax, istr)'),
(bsnl ' do {'),
(bsnl ' typedef int cctki2_loop[DIM]_intboundaries_##name;'),
(bsnl ' cGH const *restrict const cctki2_cctkGH = (cctkGH);'),
@@ -435,7 +455,7 @@ for $dim (1,2,3,4) {
(bsnl ' int const cctki2_bbox[] = { '.(crpt '([C]bboxlo), ([C]bboxhi)').' };'),
(bsnl ' int const cctki2_lsh[] = { '.(crpt 'cctki2_cctkGH->cctk_lsh[[I]]').' };'),
(bsnl ' int const cctki2_istr CCTK_ATTRIBUTE_UNUSED = (istr);'),
- (bsnl ' /* Loop over all faces, edges, and corners */'),
+ # Loop over all faces, edges, and corners
(reverse (rpt (bsnl ' for (int cctki2_[C]dir=-1; cctki2_[C]dir<=+1; ++cctki2_[C]dir) {'))),
(bsnl ' int cctki2_any_bbox ='),
(bsnlsep [rpt ' (cctki2_[C]dir==-1 ? cctki2_bbox[[2*I]] : 0) || (cctki2_[C]dir==+1 ? cctki2_bbox[[2*I+1]] : 0)'], '||', ';'),
@@ -455,7 +475,7 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt 'cctki2_bmin[[I]]').','),
(bsnl ' '.(crpt 'cctki2_bmax[[I]]').','),
(rpt (bsnl ' cctki2_cctkGH->cctk_ash[[I]],')),
- (bsnl ' cctki2_istr) {'),
+ (bsnl ' imin,imax, cctki2_istr) {'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]STR_INTBOUNDARIES(name)'),
(bsnl ' } CCTK_ENDLOOP[DIM]STR_NORMAL(name##_intboundaries);'),
@@ -472,14 +492,14 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt '[C]').')'),
(bsnl ' CCTK_LOOP[DIM]STR_ALL(name, (cctkGH),'),
(bsnl ' '.(crpt '[C]').','),
- (bsnl ' 1)'),
+ (bsnl ' cctki3_imin_,cctki3_imax_, 1)'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]_ALL(name)'),
(bsnl ' CCTK_ENDLOOP[DIM]STR_ALL(name)'),
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]STR_ALL(name, cctkGH,'),
(bsnl ' '.(crpt '[C]').','),
- (bsnl ' istr)'),
+ (bsnl ' imin,imax, istr)'),
(bsnl ' do {'),
(bsnl ' typedef int cctki3_loop[DIM]_all_##name;'),
(bsnl ' cGH const *restrict const cctki3_cctkGH = (cctkGH);'),
@@ -493,7 +513,7 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt '0').','),
(rpt (bsnl ' cctki3_cctkGH->cctk_lsh[[I]],')),
(rpt (bsnl ' cctki3_cctkGH->cctk_ash[[I]],')),
- (bsnl ' (istr)) {'),
+ (bsnl ' imin,imax, (istr)) {'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]STR_ALL(name)'),
(bsnl ' } CCTK_ENDLOOP[DIM]STR(name##_all);'),
@@ -508,14 +528,14 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt '[C]').')'),
(bsnl ' CCTK_LOOP[DIM]STR_INT(name, (cctkGH),'),
(bsnl ' '.(crpt '[C]').','),
- (bsnl ' 1)'),
+ (bsnl ' cctki3_imin_,cctki3_imax_, 1)'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]_INT(name)'),
(bsnl ' CCTK_ENDLOOP[DIM]STR_INT(name)'),
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]STR_INT(name, cctkGH,'),
(bsnl ' '.(crpt '[C]').','),
- (bsnl ' istr)'),
+ (bsnl ' imin,imax, istr)'),
(bsnl ' do {'),
(bsnl ' typedef int cctki3_loop[DIM]_int_##name;'),
(bsnl ' cGH const *restrict const cctki3_cctkGH = (cctkGH);'),
@@ -536,7 +556,7 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt '[C]').','),
(bsnl ' '.(crpt 'cctki3_bndsize[[2*I]]').','),
(bsnl ' '.(crpt 'cctki3_bndsize[[2*I+1]]').','),
- (bsnl ' (istr)) {'),
+ (bsnl ' imin,imax, (istr)) {'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]STR_INT(name)'),
(bsnl ' } CCTK_ENDLOOP[DIM]STR_INTERIOR(name##_int);'),
@@ -553,7 +573,7 @@ for $dim (1,2,3,4) {
(bsnl ' CCTK_LOOP[DIM]STR_BND(name, (cctkGH),'),
(bsnl ' '.(crpt '[C]').','),
(bsnl ' '.(crpt 'n[C]').','),
- (bsnl ' 1)'),
+ (bsnl ' cctki3_imin_,cctki3_imax_, 1)'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]_BND(name)'),
(bsnl ' CCTK_ENDLOOP[DIM]STR_BND(name)'),
@@ -561,7 +581,7 @@ for $dim (1,2,3,4) {
(bsnl '#define CCTK_LOOP[DIM]STR_BND(name, cctkGH,'),
(bsnl ' '.(crpt '[C]').','),
(bsnl ' '.(crpt 'n[C]').','),
- (bsnl ' istr)'),
+ (bsnl ' imin,imax, istr)'),
(bsnl ' do {'),
(bsnl ' typedef int cctki3_loop[DIM]_bnd_##name;'),
(bsnl ' cGH const *restrict const cctki3_cctkGH = (cctkGH);'),
@@ -585,7 +605,7 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt 'cctki3_bndsize[[2*I+1]]').','),
(bsnl ' '.(crpt 'cctki3_is_physbnd[[2*I]]').','),
(bsnl ' '.(crpt 'cctki3_is_physbnd[[2*I+1]]').','),
- (bsnl ' (istr)) {'),
+ (bsnl ' imin,imax, (istr)) {'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]STR_BND(name)'),
(bsnl ' } CCTK_ENDLOOP[DIM]STR_BOUNDARIES(name##_bnd);'),
@@ -602,7 +622,7 @@ for $dim (1,2,3,4) {
(bsnl ' CCTK_LOOP[DIM]STR_INTBND(name, (cctkGH),'),
(bsnl ' '.(crpt '[C]').','),
(bsnl ' '.(crpt 'n[C]').','),
- (bsnl ' 1)'),
+ (bsnl ' cctki3_imin_,cctki3_imax_, 1)'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]_INTBND(name)'),
(bsnl ' CCTK_ENDLOOP[DIM]STR_INTBND(name)'),
@@ -610,7 +630,7 @@ for $dim (1,2,3,4) {
(bsnl '#define CCTK_LOOP[DIM]STR_INTBND(name, cctkGH,'),
(bsnl ' '.(crpt '[C]').','),
(bsnl ' '.(crpt 'n[C]').','),
- (bsnl ' istr)'),
+ (bsnl ' imin,imax, istr)'),
(bsnl ' do {'),
(bsnl ' typedef int cctki3_loop[DIM]_intbnd_##name;'),
(bsnl ' cGH const *restrict const cctki3_cctkGH = (cctkGH);'),
@@ -634,7 +654,7 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt 'cctki3_bndsize[[2*I+1]]').','),
(bsnl ' '.(crpt 'cctki3_is_physbnd[[2*I]]').','),
(bsnl ' '.(crpt 'cctki3_is_physbnd[[2*I+1]]').','),
- (bsnl ' (istr)) {'),
+ (bsnl ' imin,imax, (istr)) {'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]STR_INTBND(name)'),
(bsnl ' } CCTK_ENDLOOP[DIM]STR_INTBOUNDARIES(name##_intbnd);'),
@@ -651,6 +671,7 @@ for $dim (1,2,3,4) {
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]_NORMAL_DECLARE(name)'),
(bsnl ' CCTK_LOOP[DIM]STR_NORMAL_DECLARE(name)'),
+ (bsnl ' && integer :: name/**/0_imin_, name/**/0_imax_'),
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]_NORMAL_OMP_PRIVATE(name)'),
(bsnl ' CCTK_LOOP[DIM]STR_NORMAL_OMP_PRIVATE(name)'),
@@ -669,7 +690,7 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt '[C]min').','),
(bsnl ' '.(crpt '[C]max').','),
(bsnl ' '.(crpt '[C]ash').','),
- (bsnl ' 1)'),
+ (bsnl ' name/**/0_imin_,name/**/0_imax_, 1)'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]_NORMAL(name)'),
(bsnl ' CCTK_ENDLOOP[DIM]STR_NORMAL(name)'),
@@ -678,6 +699,7 @@ for $dim (1,2,3,4) {
(bsnl ' && integer :: '.(crpt 'name/**/0_[C]dir')),
(bsnl ' && integer :: '.(crpt 'name/**/0_[C]min')),
(bsnl ' && integer :: '.(crpt 'name/**/0_[C]max')),
+ (bsnl ' && integer :: '.(crpt 'name/**/0_[C]ash')),
(bsnl ' && integer :: name/**/0_istr'),
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]STR_NORMAL_OMP_PRIVATE(name)'),
@@ -688,16 +710,23 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt '[C]').','),
(bsnl ' '.(crpt 'n[C]').','),
(bsnl ' '.(crpt '[C]dir').','),
- (bsnl ' '.(crpt '[C]min').','),
- (bsnl ' '.(crpt '[C]max').','),
+ (bsnl ' '.(crpt '[C]min_').','),
+ (bsnl ' '.(crpt '[C]max_').','),
(bsnl ' '.(crpt '[C]ash').','),
- (bsnl ' istr)'),
+ (bsnl ' imin,imax, istr)'),
(rpt (bsnl ' && name/**/0_[C]dir = [C]dir')),
- (rpt (bsnl ' && name/**/0_[C]min = [C]min')),
- (rpt (bsnl ' && name/**/0_[C]max = [C]max')),
+ (rpt (bsnl ' && name/**/0_[C]min = [C]min_')),
+ (rpt (bsnl ' && name/**/0_[C]max = [C]max_')),
+ (rpt (bsnl ' && name/**/0_[C]ash = [C]ash')),
(bsnl ' && name/**/0_istr = istr'),
- (bsnl ' && !$omp do'), # collapse([DIM])
- (reverse (rpt (bsnl ' && do [C] = name/**/0_[C]min, name/**/0_[C]max'))),
+ # Export loop bounds in the i direction
+ (bsnl ' && imin = name/**/0_imin'),
+ (bsnl ' && imax = name/**/0_imax'),
+ (bsnl ' && !$omp do[DIM==1?: collapse([DIM-1])]'),
+ (reverse (rpt (bsnl (' && do [C] = name/**/0_[C]min' .
+ # Align i-loop to vector size
+ '[I==1? - modulo(' . (sep '', rpt '[I==1?(imin:+name/**/0_[C-1]ash*([C]]') . (sep '', rpt ')') . ', name/**/0_istr):]' .
+ ', name/**/0_[C]max')))),
(rpt (bsnl ' && if (name/**/0_[C]dir< 0) n[C] = [C]')),
(rpt (bsnl ' && if (name/**/0_[C]dir==0) n[C] = 0')),
(rpt (bsnl ' && if (name/**/0_[C]dir> 0) n[C] = name/**/0_[C]max+1-[C]')),
@@ -709,6 +738,7 @@ for $dim (1,2,3,4) {
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]_DECLARE(name)'),
(bsnl ' CCTK_LOOP[DIM]STR_DECLARE(name)'),
+ (bsnl ' && integer :: name/**/1_imin_, name/**/1_imax_'),
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]_OMP_PRIVATE(name)'),
(bsnl ' CCTK_LOOP[DIM]STR_OMP_PRIVATE(name)'),
@@ -723,7 +753,7 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt '[C]min').','),
(bsnl ' '.(crpt '[C]max').','),
(bsnl ' '.(crpt '[C]ash').','),
- (bsnl ' 1)'),
+ (bsnl ' name/**/1_imin_,name/**/1_imax_, 1)'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM](name)'),
(bsnl ' CCTK_ENDLOOP[DIM]STR(name)'),
@@ -737,18 +767,18 @@ for $dim (1,2,3,4) {
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]STR(name,'),
(bsnl ' '.(crpt '[C]').','),
- (bsnl ' '.(crpt '[C]min').','),
- (bsnl ' '.(crpt '[C]max').','),
+ (bsnl ' '.(crpt '[C]min_').','),
+ (bsnl ' '.(crpt '[C]max_').','),
(bsnl ' '.(crpt '[C]ash').','),
- (bsnl ' istr)'),
+ (bsnl ' imin,imax, istr)'),
(bsnl ' CCTK_LOOP[DIM]STR_NORMAL(name,'),
(bsnl ' '.(crpt '[C]').','),
(bsnl ' '.(crpt 'name/**/1_n[C]').','),
(bsnl ' '.(crpt '0').','),
- (bsnl ' '.(crpt '[C]min').','),
- (bsnl ' '.(crpt '[C]max').','),
+ (bsnl ' '.(crpt '[C]min_').','),
+ (bsnl ' '.(crpt '[C]max_').','),
(bsnl ' '.(crpt '[C]ash').','),
- (bsnl ' istr)'),
+ (bsnl ' imin,imax, istr)'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]STR(name)'),
(bsnl ' CCTK_ENDLOOP[DIM]STR_NORMAL(name)'),
@@ -759,6 +789,7 @@ for $dim (1,2,3,4) {
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]_INTERIOR_DECLARE(name)'),
(bsnl ' CCTK_LOOP[DIM]STR_INTERIOR_DECLARE(name)'),
+ (bsnl ' && integer :: name/**/2_imin_, name/**/2_imax_'),
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]_INTERIOR_OMP_PRIVATE(name)'),
(bsnl ' CCTK_LOOP[DIM]STR_INTERIOR_OMP_PRIVATE(name)'),
@@ -771,7 +802,7 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt '[C]').','),
(bsnl ' '.(crpt '[C]blo').','),
(bsnl ' '.(crpt '[C]bhi').','),
- (bsnl ' 1)'),
+ (bsnl ' name/**/2_imin_,name/**/2_imax_, 1)'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]_INTERIOR(name)'),
(bsnl ' CCTK_ENDLOOP[DIM]STR_INTERIOR(name)'),
@@ -786,13 +817,13 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt '[C]').','),
(bsnl ' '.(crpt '[C]blo').','),
(bsnl ' '.(crpt '[C]bhi').','),
- (bsnl ' istr)'),
+ (bsnl ' imin,imax, istr)'),
(bsnl ' CCTK_LOOP[DIM]STR(name/**/_interior,'),
(bsnl ' '.(crpt '[C]').','),
(rpt (bsnl ' ([C]blo)+1,')),
(rpt (bsnl ' cctk_lsh([I+1])-([C]bhi),')),
(bsnl ' '.(crpt 'cctk_ash([I+1])').','),
- (bsnl ' istr)'),
+ (bsnl ' imin,imax, istr)'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]STR_INTERIOR(name)'),
(bsnl ' CCTK_ENDLOOP[DIM]STR(name/**/_interior)'),
@@ -803,6 +834,7 @@ for $dim (1,2,3,4) {
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]_BOUNDARIES_DECLARE(name)'),
(bsnl ' CCTK_LOOP[DIM]STR_BOUNDARIES_DECLARE(name)'),
+ (bsnl ' && integer :: name/**/2_imin_, name/**/2_imax_'),
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]_BOUNDARIES_OMP_PRIVATE(name)'),
(bsnl ' CCTK_LOOP[DIM]STR_BOUNDARIES_OMP_PRIVATE(name)'),
@@ -821,7 +853,7 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt '[C]bhi').','),
(bsnl ' '.(crpt '[C]bboxlo').','),
(bsnl ' '.(crpt '[C]bboxhi').','),
- (bsnl ' 1)'),
+ (bsnl ' name/**/2_imin_,name/**/2_imax_, 1)'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]_BOUNDARIES(name)'),
(bsnl ' CCTK_ENDLOOP[DIM]STR_BOUNDARIES(name)'),
@@ -845,13 +877,13 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt '[C]bhi').','),
(bsnl ' '.(crpt '[C]bboxlo').','),
(bsnl ' '.(crpt '[C]bboxhi').','),
- (bsnl ' istr)'),
+ (bsnl ' imin,imax, istr)'),
(bsnl ' && name/**/2_blo = (/ '.(crpt '[C]blo').' /)'),
(bsnl ' && name/**/2_bhi = (/ '.(crpt '[C]bhi').' /)'),
(bsnl ' && name/**/2_bboxlo = (/ '.(crpt '[C]bboxlo').' /)'),
(bsnl ' && name/**/2_bboxhi = (/ '.(crpt '[C]bboxhi').' /)'),
(bsnl ' && name/**/2_istr = (istr)'),
- (bsnl ' && /* Loop over all faces, edges, and corners */'),
+ # Loop over all faces, edges, and corners
(reverse (rpt (bsnl ' && do name/**/2_[C]dir=-1, +1'))),
(bsnl ' && name/**/2_any_bbox = .false.'),
(rpt (bsnl ' && if (name/**/2_[C]dir==-1) name/**/2_any_bbox = name/**/2_any_bbox .or. name/**/2_bboxlo([I+1]) /= 0')),
@@ -870,7 +902,7 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt 'name/**/2_bmin([I+1])').','),
(bsnl ' '.(crpt 'name/**/2_bmax([I+1])').','),
(rpt (bsnl ' cctk_ash([I+1]),')),
- (bsnl ' name/**/2_istr)'),
+ (bsnl ' imin,imax, name/**/2_istr)'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]STR_BOUNDARIES(name)'),
(bsnl ' CCTK_ENDLOOP[DIM]STR_NORMAL(name/**/_boundaries)'),
@@ -883,6 +915,7 @@ for $dim (1,2,3,4) {
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]_INTBOUNDARIES_DECLARE(name)'),
(bsnl ' CCTK_LOOP[DIM]STR_INTBOUNDARIES_DECLARE(name)'),
+ (bsnl ' && integer :: name/**/2_imin_, name/**/2_imax_'),
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]_INTBOUNDARIES_OMP_PRIVATE(name)'),
(bsnl ' CCTK_LOOP[DIM]STR_INTBOUNDARIES_OMP_PRIVATE(name)'),
@@ -901,7 +934,7 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt '[C]bhi').','),
(bsnl ' '.(crpt '[C]bboxlo').','),
(bsnl ' '.(crpt '[C]bboxhi').','),
- (bsnl ' 1)'),
+ (bsnl ' name/**/2_imin_,name/**/2_imax_, 1)'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]_INTBOUNDARIES(name)'),
(bsnl ' CCTK_ENDLOOP[DIM]STR_INTBOUNDARIES(name)'),
@@ -925,13 +958,13 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt '[C]bhi').','),
(bsnl ' '.(crpt '[C]bboxlo').','),
(bsnl ' '.(crpt '[C]bboxhi').','),
- (bsnl ' istr)'),
+ (bsnl ' imin,imax, istr)'),
(bsnl ' && name/**/2_blo = (/ '.(crpt '[C]blo').' /)'),
(bsnl ' && name/**/2_bhi = (/ '.(crpt '[C]bhi').' /)'),
(bsnl ' && name/**/2_bboxlo = (/ '.(crpt '[C]bboxlo').' /)'),
(bsnl ' && name/**/2_bboxhi = (/ '.(crpt '[C]bboxhi').' /)'),
(bsnl ' && name/**/2_istr = (istr)'),
- (bsnl ' && /* Loop over all faces, edges, and corners */'),
+ # Loop over all faces, edges, and corners
(reverse (rpt (bsnl ' && do name/**/2_[C]dir=-1, +1'))),
(bsnl ' && name/**/2_any_bbox = .false.'),
(rpt (bsnl ' && if (name/**/2_[C]dir==-1) name/**/2_any_bbox = name/**/2_any_bbox .or. name/**/2_bboxlo([I+1]) /= 0')),
@@ -953,7 +986,7 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt 'name/**/2_bmin([I+1])').','),
(bsnl ' '.(crpt 'name/**/2_bmax([I+1])').','),
(rpt (bsnl ' cctk_ash([I+1]),')),
- (bsnl ' name/**/2_istr)'),
+ (bsnl ' imin,imax, name/**/2_istr)'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]STR_INTBOUNDARIES(name)'),
(bsnl ' CCTK_ENDLOOP[DIM]STR_NORMAL(name/**/_intboundaries)'),
@@ -966,6 +999,7 @@ for $dim (1,2,3,4) {
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]_ALL_DECLARE(name)'),
(bsnl ' CCTK_LOOP[DIM]STR_ALL_DECLARE(name)'),
+ (bsnl ' && integer :: name/**/3_imin_, name/**/3_imax_'),
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]_ALL_OMP_PRIVATE(name)'),
(bsnl ' CCTK_LOOP[DIM]STR_ALL_OMP_PRIVATE(name)'),
@@ -974,7 +1008,7 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt '[C]').')'),
(bsnl ' CCTK_LOOP[DIM]STR_ALL(name,'),
(bsnl ' '.(crpt '[C]').','),
- (bsnl ' 1)'),
+ (bsnl ' name/**/3_imin_,name/**/3_imax_, 1)'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]_ALL(name)'),
(bsnl ' CCTK_ENDLOOP[DIM]STR_ALL(name)'),
@@ -987,13 +1021,13 @@ for $dim (1,2,3,4) {
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]STR_ALL(name,'),
(bsnl ' '.(crpt '[C]').','),
- (bsnl ' istr)'),
+ (bsnl ' imin,imax, istr)'),
(bsnl ' CCTK_LOOP[DIM]STR(name/**/_all,'),
(bsnl ' '.(crpt '[C]').','),
(bsnl ' '.(crpt '1').','),
(bsnl ' '.(crpt 'cctk_lsh([I+1])').','),
(bsnl ' '.(crpt 'cctk_ash([I+1])').','),
- (bsnl ' istr)'),
+ (bsnl ' imin,imax, istr)'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]STR_ALL(name)'),
(bsnl ' CCTK_ENDLOOP[DIM]STR(name/**/_all)'),
@@ -1004,6 +1038,7 @@ for $dim (1,2,3,4) {
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]_INT_DECLARE(name)'),
(bsnl ' CCTK_LOOP[DIM]STR_INT_DECLARE(name)'),
+ (bsnl ' && integer :: name/**/3_imin_, name/**/3_imax_'),
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]_INT_OMP_PRIVATE(name)'),
(bsnl ' CCTK_LOOP[DIM]STR_INT_OMP_PRIVATE(name)'),
@@ -1012,7 +1047,7 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt '[C]').')'),
(bsnl ' CCTK_LOOP[DIM]STR_INT(name,'),
(bsnl ' '.(crpt '[C]').','),
- (bsnl ' 1)'),
+ (bsnl ' name/**/3_imin_,name/**/3_imax_, 1)'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]_INT(name)'),
(bsnl ' CCTK_ENDLOOP[DIM]STR_INT(name)'),
@@ -1030,7 +1065,7 @@ for $dim (1,2,3,4) {
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]STR_INT(name,'),
(bsnl ' '.(crpt '[C]').','),
- (bsnl ' istr)'),
+ (bsnl ' imin,imax, istr)'),
(bsnl ' && !$omp single'),
(bsnl ' && name/**/3_ierr = GetBoundarySizesAndTypes'),
(bsnl ' (cctkGH, [2*DIM], name/**/3_bndsize, name/**/3_is_ghostbnd, name/**/3_is_symbnd, name/**/3_is_physbnd)'),
@@ -1039,7 +1074,7 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt '[C]').','),
(bsnl ' '.(crpt 'name/**/3_bndsize([2*I+1]+1)').','),
(bsnl ' '.(crpt 'name/**/3_bndsize([2*I+2])').','),
- (bsnl ' (istr))'),
+ (bsnl ' imin,imax, (istr))'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]STR_INT(name)'),
(bsnl ' CCTK_ENDLOOP[DIM]STR_INTERIOR(name/**/int)'),
@@ -1050,6 +1085,7 @@ for $dim (1,2,3,4) {
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]_BND_DECLARE(name)'),
(bsnl ' CCTK_LOOP[DIM]STR_BND_DECLARE(name)'),
+ (bsnl ' && integer :: name/**/3_imin_, name/**/3_imax_'),
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]_BND_OMP_PRIVATE(name)'),
(bsnl ' CCTK_LOOP[DIM]STR_BND_OMP_PRIVATE(name)'),
@@ -1060,7 +1096,7 @@ for $dim (1,2,3,4) {
(bsnl ' CCTK_LOOP[DIM]STR_BND(name,'),
(bsnl ' '.(crpt '[C]').','),
(bsnl ' '.(crpt 'n[C]').','),
- (bsnl ' 1)'),
+ (bsnl ' name/**/3_imin_,name/**/3_imax_, 1)'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]_BND(name)'),
(bsnl ' CCTK_ENDLOOP[DIM]STR_BND(name)'),
@@ -1079,7 +1115,7 @@ for $dim (1,2,3,4) {
(bsnl '#define CCTK_LOOP[DIM]STR_BND(name,'),
(bsnl ' '.(crpt '[C]').','),
(bsnl ' '.(crpt 'n[C]').','),
- (bsnl ' istr)'),
+ (bsnl ' imin,imax, istr)'),
(bsnl ' && !$omp single'),
(bsnl ' && name/**/3_ierr = GetBoundarySizesAndTypes'),
(bsnl ' (cctkGH, [2*DIM], name/**/3_bndsize, name/**/3_is_ghostbnd, name/**/3_is_symbnd, name/**/3_is_physbnd)'),
@@ -1091,7 +1127,7 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt 'name/**/3_bndsize([2*I+2])').','),
(bsnl ' '.(crpt 'name/**/3_is_physbnd([2*I+1])').','),
(bsnl ' '.(crpt 'name/**/3_is_physbnd([2*I+2])').','),
- (bsnl ' (istr))'),
+ (bsnl ' imin,imax, (istr))'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]STR_BND(name)'),
(bsnl ' CCTK_ENDLOOP[DIM]STR_BOUNDARIES(name/**/_bnd)'),
@@ -1105,6 +1141,7 @@ for $dim (1,2,3,4) {
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]_INTBND_DECLARE(name)'),
(bsnl ' CCTK_LOOP[DIM]STR_INTBND_DECLARE(name)'),
+ (bsnl ' && integer :: name/**/3_imin_, name/**/3_imax_'),
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]_INTBND_OMP_PRIVATE(name)'),
(bsnl ' CCTK_LOOP[DIM]STR_INTBND_OMP_PRIVATE(name)'),
@@ -1115,7 +1152,7 @@ for $dim (1,2,3,4) {
(bsnl ' CCTK_LOOP[DIM]STR_INTBND(name,'),
(bsnl ' '.(crpt '[C]').','),
(bsnl ' '.(crpt 'n[C]').','),
- (bsnl ' 1)'),
+ (bsnl ' name/**/3_imin_,name/**/3_imax_, 1)'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]_INTBND(name)'),
(bsnl ' CCTK_ENDLOOP[DIM]STR_INTBND(name)'),
@@ -1134,7 +1171,7 @@ for $dim (1,2,3,4) {
(bsnl '#define CCTK_LOOP[DIM]STR_INTBND(name,'),
(bsnl ' '.(crpt '[C]').','),
(bsnl ' '.(crpt 'n[C]').','),
- (bsnl ' istr)'),
+ (bsnl ' imin,imax, istr)'),
(bsnl ' && !$omp single'),
(bsnl ' && name/**/3_ierr = GetBoundarySizesAndTypes'),
(bsnl ' (cctkGH, [2*DIM], name/**/3_bndsize, name/**/3_is_ghostbnd, name/**/3_is_symbnd, name/**/3_is_physbnd)'),
@@ -1146,7 +1183,7 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt 'name/**/3_bndsize([2*I+2])').','),
(bsnl ' '.(crpt 'name/**/3_is_physbnd([2*I+1])').','),
(bsnl ' '.(crpt 'name/**/3_is_physbnd([2*I+2])').','),
- (bsnl ' (istr))'),
+ (bsnl ' imin,imax, (istr))'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]STR_INTBND(name)'),
(bsnl ' CCTK_ENDLOOP[DIM]STR_INTBOUNDARIES(name/**/_bnd)'),