summaryrefslogtreecommitdiff
path: root/src/include/cctk_Loop.h.pl
diff options
context:
space:
mode:
authoreschnett <eschnett@17b73243-c579-4c4c-a9d2-2d5706c11dac>2012-09-19 15:27:34 +0000
committereschnett <eschnett@17b73243-c579-4c4c-a9d2-2d5706c11dac>2012-09-19 15:27:34 +0000
commit4a68eb77e50d9dae0422fed4338f6146c37625dc (patch)
treeb15aecd81059870da92523de1fb2a5affe53d103 /src/include/cctk_Loop.h.pl
parent2b471273798ec4a698eca6783f2de9057ca6584f (diff)
Update Fortran API for CCTK_LOOP macros
git-svn-id: http://svn.cactuscode.org/flesh/trunk@4873 17b73243-c579-4c4c-a9d2-2d5706c11dac
Diffstat (limited to 'src/include/cctk_Loop.h.pl')
-rwxr-xr-xsrc/include/cctk_Loop.h.pl553
1 files changed, 444 insertions, 109 deletions
diff --git a/src/include/cctk_Loop.h.pl b/src/include/cctk_Loop.h.pl
index 17a50c4e..479b2fba 100755
--- a/src/include/cctk_Loop.h.pl
+++ b/src/include/cctk_Loop.h.pl
@@ -109,12 +109,14 @@ sub rpt ($)
my $int1 = $int+1;
my $int2 = 2*$int;
my $int21 = 2*$int+1;
+ my $int22 = 2*$int+2;
my $char = ('i','j','k','l')[$d-1];
my $tmp = $str;
$tmp =~ s{\[I\]}{$int}g;
$tmp =~ s{\[I\+1\]}{$int1}g;
$tmp =~ s{\[2\*I\]}{$int2}g;
$tmp =~ s{\[2\*I\+1\]}{$int21}g;
+ $tmp =~ s{\[2\*I\+2\]}{$int22}g;
$tmp =~ s{\[C\]}{$char}g;
push @ret, $tmp;
}
@@ -171,7 +173,7 @@ push @lines, (
(nl ''),
(nl '/* WARNING: This file is auto-generated. Do not edit. */'),
(nl '/* Edit cctk_Loop.h.pl instead, and then re-generate this file via */'),
- (nl '/* perl cctk_Loop.h.pl.pl */'),
+ (nl '/* perl cctk_Loop.h.pl */'),
(nl '/* Documentation can also be found in "cctk_Loop.h.pl". */'),
(nl ''),
(nl '#ifdef CCODE'),
@@ -361,7 +363,7 @@ for $dim (1,2,3,4) {
(bsnl ' int const cctki2_bhi[] = { '.(crpt '([C]bhi)').' };'),
(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_istr1 CCTK_ATTRIBUTE_UNUSED = (istr);'),
+ (bsnl ' int const cctki2_istr CCTK_ATTRIBUTE_UNUSED = (istr);'),
(bsnl ' /* 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 ='),
@@ -380,7 +382,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_istr1) {'),
+ (bsnl ' cctki2_istr) {'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]STR_BOUNDARIES(name)'),
(bsnl ' } CCTK_ENDLOOP[DIM]STR_NORMAL(name##_boundaries);'),
@@ -432,7 +434,7 @@ for $dim (1,2,3,4) {
(bsnl ' int const cctki2_bhi[] = { '.(crpt '([C]bhi)').' };'),
(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_istr1 CCTK_ATTRIBUTE_UNUSED = (istr);'),
+ (bsnl ' int const cctki2_istr CCTK_ATTRIBUTE_UNUSED = (istr);'),
(bsnl ' /* 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 ='),
@@ -453,7 +455,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_istr1) {'),
+ (bsnl ' cctki2_istr) {'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]STR_INTBOUNDARIES(name)'),
(bsnl ' } CCTK_ENDLOOP[DIM]STR_NORMAL(name##_intboundaries);'),
@@ -647,24 +649,91 @@ for $dim (1,2,3,4) {
(nl ''),
(nl '/* LOOP */'),
(nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]_NORMAL_DECLARE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_NORMAL_DECLARE(name)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]_NORMAL_OMP_PRIVATE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_NORMAL_OMP_PRIVATE(name)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]_NORMAL(name,'),
+ (bsnl ' '.(crpt '[C]').','),
+ (bsnl ' '.(crpt 'n[C]').','),
+ (bsnl ' '.(crpt '[C]dir').','),
+ (bsnl ' '.(crpt '[C]min').','),
+ (bsnl ' '.(crpt '[C]max').','),
+ (bsnl ' '.(crpt '[C]ash').')'),
+ (bsnl ' CCTK_LOOP[DIM]STR_NORMAL(name,'),
+ (bsnl ' '.(crpt '[C]').','),
+ (bsnl ' '.(crpt 'n[C]').','),
+ (bsnl ' '.(crpt '[C]dir').','),
+ (bsnl ' '.(crpt '[C]min').','),
+ (bsnl ' '.(crpt '[C]max').','),
+ (bsnl ' '.(crpt '[C]ash').','),
+ (bsnl ' 1)'),
+ (nl ''),
+ (bsnl '#define CCTK_ENDLOOP[DIM]_NORMAL(name)'),
+ (bsnl ' CCTK_ENDLOOP[DIM]STR_NORMAL(name)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]STR_NORMAL_DECLARE(name)'),
+ (bsnl ' && integer :: '.(crpt 'name/**/0_[C]dir')),
+ (bsnl ' && integer :: '.(crpt 'name/**/0_[C]min')),
+ (bsnl ' && integer :: '.(crpt 'name/**/0_[C]max')),
+ (bsnl ' && integer :: name/**/0_istr'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]STR_NORMAL_OMP_PRIVATE(name)'),
+ (bsnl ' && !$omp private ('.(crpt '[C]').')'),
+ (bsnl ' && !$omp private ('.(crpt 'n[C]').')'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]STR_NORMAL(name,'),
+ (bsnl ' '.(crpt '[C]').','),
+ (bsnl ' '.(crpt 'n[C]').','),
+ (bsnl ' '.(crpt '[C]dir').','),
+ (bsnl ' '.(crpt '[C]min').','),
+ (bsnl ' '.(crpt '[C]max').','),
+ (bsnl ' '.(crpt '[C]ash').','),
+ (bsnl ' 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')),
+ (bsnl ' && name/**/0_istr = istr'),
+ (bsnl ' && !$omp do'), # collapse([DIM])
+ (reverse (rpt (bsnl ' && do [C] = name/**/0_[C]min, 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]')),
+ (nl ''),
+ (bsnl '#define CCTK_ENDLOOP[DIM]STR_NORMAL(name)'),
+ (rpt (bsnl ' && end do')),
+ (nl ''),
+ (nl ''),
+ (nl ''),
(bsnl '#define CCTK_LOOP[DIM]_DECLARE(name)'),
- (bsnl ' && integer :: '.(crpt 'name/**/_[C]min')),
- (bsnl ' && integer :: '.(crpt 'name/**/_[C]max')),
- (bsnl ' && integer :: name/**/_istr'),
+ (bsnl ' CCTK_LOOP[DIM]STR_DECLARE(name)'),
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]_OMP_PRIVATE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_OMP_PRIVATE(name)'),
(nl ''),
(bsnl '#define CCTK_LOOP[DIM](name,'),
(bsnl ' '.(crpt '[C]').','),
(bsnl ' '.(crpt '[C]min').','),
(bsnl ' '.(crpt '[C]max').','),
(bsnl ' '.(crpt '[C]ash').')'),
- (bsnl ' CCTK_LOOP[DIM]STR(name,'),
- (bsnl ' '.(crpt '[C]').','),
- (bsnl ' '.(crpt '[C]min').','),
- (bsnl ' '.(crpt '[C]max').','),
- (bsnl ' '.(crpt '[C]ash').','),
- (bsnl ' 1)'),
+ (bsnl ' CCTK_LOOP[DIM]STR(name,'),
+ (bsnl ' '.(crpt '[C]').','),
+ (bsnl ' '.(crpt '[C]min').','),
+ (bsnl ' '.(crpt '[C]max').','),
+ (bsnl ' '.(crpt '[C]ash').','),
+ (bsnl ' 1)'),
+ (nl ''),
+ (bsnl '#define CCTK_ENDLOOP[DIM](name)'),
+ (bsnl ' CCTK_ENDLOOP[DIM]STR(name)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]STR_DECLARE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_NORMAL_DECLARE(name)'),
+ (bsnl ' && integer :: '.(crpt 'name/**/1_n[C]')),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]STR_OMP_PRIVATE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_NORMAL_OMP_PRIVATE(name)'),
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]STR(name,'),
(bsnl ' '.(crpt '[C]').','),
@@ -672,149 +741,415 @@ for $dim (1,2,3,4) {
(bsnl ' '.(crpt '[C]max').','),
(bsnl ' '.(crpt '[C]ash').','),
(bsnl ' istr)'),
- (rpt (bsnl ' && name/**/_[C]min = [C]min')),
- (rpt (bsnl ' && name/**/_[C]max = [C]max')),
- (bsnl ' && name/**/_istr = istr'),
- (reverse (rpt (bsnl ' && do [C] = name/**/_[C]min, name/**/_[C]max'))),
- (nl ''),
- (bsnl '#define CCTK_ENDLOOP[DIM](name)'),
- (bsnl ' CCTK_ENDLOOP[DIM]STR(name)'),
+ (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]ash').','),
+ (bsnl ' istr)'),
(nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]STR(name)'),
- (rpt (bsnl ' && end do')),
- (nl ''),
- (nl ''),
- (nl ''),
- (nl '/* LOOP_ALL */'),
- (nl ''),
- (bsnl '#define CCTK_LOOP[DIM]_ALL_DECLARE(name)'),
- (bsnl ' CCTK_LOOP[DIM]_DECLARE(name)'),
- (nl ''),
- (bsnl '#define CCTK_LOOP[DIM]_ALL_OMP_PRIVATE(name)'),
- (bsnl ' CCTK_LOOP[DIM]_OMP_PRIVATE(name)'),
- (nl ''),
- (bsnl '#define CCTK_LOOP[DIM]_ALL(name,'),
- (bsnl ' '.(crpt '[C]').')'),
- (bsnl ' CCTK_LOOP[DIM]STR_ALL(name,'),
- (bsnl ' '.(crpt '[C]').','),
- (bsnl ' 1)'),
- (nl ''),
- (bsnl '#define CCTK_LOOP[DIM]STR_ALL(name,'),
- (bsnl ' '.(crpt '[C]').','),
- (bsnl ' istr)'),
- (bsnl ' CCTK_LOOP[DIM]STR(name,'),
- (bsnl ' '.(crpt '[C]').','),
- (bsnl ' '.(crpt '1').','),
- (bsnl ' '.(crpt 'cctk_lsh([I+1])').','),
- (bsnl ' '.(crpt 'cctk_ash([I+1])').','),
- (bsnl ' istr)'),
- (nl ''),
- (bsnl '#define CCTK_ENDLOOP[DIM]_ALL(name)'),
- (bsnl ' CCTK_ENDLOOP[DIM]STR_ALL(name)'),
- (nl ''),
- (bsnl '#define CCTK_ENDLOOP[DIM]STR_ALL(name)'),
- (bsnl ' CCTK_ENDLOOP[DIM](name)'),
+ (bsnl ' CCTK_ENDLOOP[DIM]STR_NORMAL(name)'),
(nl ''),
(nl ''),
(nl ''),
(nl '/* LOOP_INTERIOR */'),
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]_INTERIOR_DECLARE(name)'),
- (bsnl ' CCTK_LOOP[DIM]_DECLARE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_INTERIOR_DECLARE(name)'),
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]_INTERIOR_OMP_PRIVATE(name)'),
- (bsnl ' CCTK_LOOP[DIM]_OMP_PRIVATE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_INTERIOR_OMP_PRIVATE(name)'),
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]_INTERIOR(name,'),
(bsnl ' '.(crpt '[C]').','),
(bsnl ' '.(crpt '[C]blo').','),
(bsnl ' '.(crpt '[C]bhi').')'),
- (bsnl ' CCTK_LOOP[DIM]STR_INTERIOR(name,'),
- (bsnl ' '.(crpt '[C]').','),
- (bsnl ' '.(crpt '[C]blo').','),
- (bsnl ' '.(crpt '[C]bhi').','),
- (bsnl ' 1)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_INTERIOR(name,'),
+ (bsnl ' '.(crpt '[C]').','),
+ (bsnl ' '.(crpt '[C]blo').','),
+ (bsnl ' '.(crpt '[C]bhi').','),
+ (bsnl ' 1)'),
+ (nl ''),
+ (bsnl '#define CCTK_ENDLOOP[DIM]_INTERIOR(name)'),
+ (bsnl ' CCTK_ENDLOOP[DIM]STR_INTERIOR(name)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]STR_INTERIOR_DECLARE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_DECLARE(name/**/_interior)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]STR_INTERIOR_OMP_PRIVATE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_OMP_PRIVATE(name/**/_interior)'),
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]STR_INTERIOR(name,'),
(bsnl ' '.(crpt '[C]').','),
(bsnl ' '.(crpt '[C]blo').','),
(bsnl ' '.(crpt '[C]bhi').','),
(bsnl ' istr)'),
- (bsnl ' CCTK_LOOP[DIM]STR(name,'),
+ (bsnl ' CCTK_LOOP[DIM]STR(name/**/_interior,'),
(bsnl ' '.(crpt '[C]').','),
- (bsnl ' '.(crpt '([C]blo)').','),
+ (rpt (bsnl ' ([C]blo)+1,')),
(rpt (bsnl ' cctk_lsh([I+1])-([C]bhi),')),
(bsnl ' '.(crpt 'cctk_ash([I+1])').','),
(bsnl ' istr)'),
(nl ''),
- (bsnl '#define CCTK_ENDLOOP[DIM]_INTERIOR(name)'),
- (bsnl ' CCTK_ENDLOOP[DIM]STR_INTERIOR(name)'),
- (nl ''),
(bsnl '#define CCTK_ENDLOOP[DIM]STR_INTERIOR(name)'),
- (bsnl ' CCTK_ENDLOOP[DIM](name)'),
+ (bsnl ' CCTK_ENDLOOP[DIM]STR(name/**/_interior)'),
(nl ''),
(nl ''),
(nl ''),
(nl '/* LOOP_BOUNDARIES */'),
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]_BOUNDARIES_DECLARE(name)'),
- (bsnl ' CCTK_LOOP[DIM]_DECLARE(name)'),
- (bsnl ' && integer :: lc_bmin([DIM]), lc_bmax([DIM])'),
- (bsnl ' && integer :: lc_blo([DIM]), lc_bhi([DIM])'),
- (bsnl ' && integer :: lc_istr'),
- (bsnl ' && integer :: lc_dir, lc_face'),
- (bsnl ' && integer :: lc_d'),
+ (bsnl ' CCTK_LOOP[DIM]STR_BOUNDARIES_DECLARE(name)'),
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]_BOUNDARIES_OMP_PRIVATE(name)'),
- (bsnl ' CCTK_LOOP[DIM]_OMP_PRIVATE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_BOUNDARIES_OMP_PRIVATE(name)'),
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]_BOUNDARIES(name,'),
(bsnl ' '.(crpt '[C]').','),
+ (bsnl ' '.(crpt 'n[C]').','),
(bsnl ' '.(crpt '[C]blo').','),
- (bsnl ' '.(crpt '[C]bhi').')'),
- (bsnl ' CCTK_LOOP[DIM]STR_BOUNDARIES(name,'),
- (bsnl ' '.(crpt '[C]').','),
- (bsnl ' '.(crpt '[C]blo').','),
- (bsnl ' '.(crpt '[C]bhi').','),
- (bsnl ' 1)'),
+ (bsnl ' '.(crpt '[C]bhi').','),
+ (bsnl ' '.(crpt '[C]bboxlo').','),
+ (bsnl ' '.(crpt '[C]bboxhi').')'),
+ (bsnl ' CCTK_LOOP[DIM]STR_BOUNDARIES(name,'),
+ (bsnl ' '.(crpt '[C]').','),
+ (bsnl ' '.(crpt 'n[C]').','),
+ (bsnl ' '.(crpt '[C]blo').','),
+ (bsnl ' '.(crpt '[C]bhi').','),
+ (bsnl ' '.(crpt '[C]bboxlo').','),
+ (bsnl ' '.(crpt '[C]bboxhi').','),
+ (bsnl ' 1)'),
+ (nl ''),
+ (bsnl '#define CCTK_ENDLOOP[DIM]_BOUNDARIES(name)'),
+ (bsnl ' CCTK_ENDLOOP[DIM]STR_BOUNDARIES(name)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]STR_BOUNDARIES_DECLARE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_NORMAL_DECLARE(name/**/_boundaries)'),
+ (bsnl ' && integer :: name/**/2_blo([DIM]), name/**/2_bhi([DIM])'),
+ (bsnl ' && integer :: name/**/2_bboxlo([DIM]), name/**/2_bboxhi([DIM])'),
+ (bsnl ' && integer :: name/**/2_istr'),
+ (rpt (bsnl ' && integer :: name/**/2_[C]dir')),
+ (bsnl ' && logical :: name/**/2_any_bbox'),
+ (bsnl ' && integer :: name/**/2_bmin([DIM]), name/**/2_bmax([DIM])'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]STR_BOUNDARIES_OMP_PRIVATE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_NORMAL_OMP_PRIVATE(name/**/_boundaries)'),
(nl ''),
(bsnl '#define CCTK_LOOP[DIM]STR_BOUNDARIES(name,'),
(bsnl ' '.(crpt '[C]').','),
+ (bsnl ' '.(crpt 'n[C]').','),
(bsnl ' '.(crpt '[C]blo').','),
(bsnl ' '.(crpt '[C]bhi').','),
+ (bsnl ' '.(crpt '[C]bboxlo').','),
+ (bsnl ' '.(crpt '[C]bboxhi').','),
(bsnl ' istr)'),
- (bsnl ' && lc_blo = (/ '.(crpt '[C]blo').' /)'),
- (bsnl ' && lc_bhi = (/ '.(crpt '[C]bhi').' /)'),
- (bsnl ' && lc_istr = istr'),
- (bsnl ' && do lc_dir=1,[DIM]'),
- (bsnl ' && do lc_face=1,2'),
- (bsnl ' && do lc_d=1,[DIM]'),
- (bsnl ' && lc_bmin(lc_d) = 1'),
- (bsnl ' && lc_bmax(lc_d) = cctk_lsh(lc_d)'),
- (bsnl ' && if (lc_d<lc_dir) then'),
- (bsnl ' && lc_bmin(lc_d) = lc_bmin(lc_d)+lc_blo(lc_d)'),
- (bsnl ' && lc_bmax(lc_d) = lc_bmax(lc_d)-lc_bhi(lc_d)'),
- (bsnl ' && end if'),
- (bsnl ' && end do'),
- (bsnl ' && if (lc_face==1) then'),
- (bsnl ' && lc_bmax(lc_dir) = lc_bmin(lc_dir)+lc_blo(lc_dir)'),
- (bsnl ' && else'),
- (bsnl ' && lc_bmin(lc_dir) = lc_bmax(lc_dir)-lc_bhi(lc_dir)'),
- (bsnl ' && end if'),
- (bsnl ' CCTK_LOOP[DIM]STR(name,'),
+ (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 */'),
+ (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')),
+ (rpt (bsnl ' && if (name/**/2_[C]dir==+1) name/**/2_any_bbox = name/**/2_any_bbox .or. name/**/2_bboxhi([I+1]) /= 0')),
+ (bsnl ' && if (name/**/2_any_bbox) then'),
+ (rpt (bsnl ' && if (name/**/2_[C]dir==-1) name/**/2_bmin([I+1]) = 1')),
+ (rpt (bsnl ' && if (name/**/2_[C]dir== 0) name/**/2_bmin([I+1]) = name/**/2_blo([I+1])+1')),
+ (rpt (bsnl ' && if (name/**/2_[C]dir==+1) name/**/2_bmin([I+1]) = cctk_lsh([I+1]) - name/**/2_bhi([I+1])')),
+ (rpt (bsnl ' && if (name/**/2_[C]dir==-1) name/**/2_bmax([I+1]) = name/**/2_blo([I+1])')),
+ (rpt (bsnl ' && if (name/**/2_[C]dir== 0) name/**/2_bmax([I+1]) = cctk_lsh([I+1]) - name/**/2_bhi([I+1])')),
+ (rpt (bsnl ' && if (name/**/2_[C]dir==+1) name/**/2_bmax([I+1]) = cctk_lsh([I+1])')),
+ (bsnl ' CCTK_LOOP[DIM]STR_NORMAL(name/**/_boundaries,'),
+ (bsnl ' '.(crpt '[C]').','),
+ (bsnl ' '.(crpt 'n[C]').','),
+ (bsnl ' '.(crpt 'name/**/2_[C]dir').','),
+ (bsnl ' '.(crpt 'name/**/2_bmin([I+1])').','),
+ (bsnl ' '.(crpt 'name/**/2_bmax([I+1])').','),
+ (rpt (bsnl ' cctk_ash([I+1]),')),
+ (bsnl ' name/**/2_istr)'),
+ (nl ''),
+ (bsnl '#define CCTK_ENDLOOP[DIM]STR_BOUNDARIES(name)'),
+ (bsnl ' CCTK_ENDLOOP[DIM]STR_NORMAL(name/**/_boundaries)'),
+ (bsnl ' && end if /* bbox */'),
+ (rpt (bsnl ' && end do /* dir */')),
+ (nl ''),
+ (nl ''),
+ (nl ''),
+ (nl '/* LOOP_INTBOUNDARIES */'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]_INTBOUNDARIES_DECLARE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_INTBOUNDARIES_DECLARE(name)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]_INTBOUNDARIES_OMP_PRIVATE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_INTBOUNDARIES_OMP_PRIVATE(name)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]_INTBOUNDARIES(name,'),
+ (bsnl ' '.(crpt '[C]').','),
+ (bsnl ' '.(crpt 'n[C]').','),
+ (bsnl ' '.(crpt '[C]blo').','),
+ (bsnl ' '.(crpt '[C]bhi').','),
+ (bsnl ' '.(crpt '[C]bboxlo').','),
+ (bsnl ' '.(crpt '[C]bboxhi').')'),
+ (bsnl ' CCTK_LOOP[DIM]STR_INTBOUNDARIES(name,'),
+ (bsnl ' '.(crpt '[C]').','),
+ (bsnl ' '.(crpt 'n[C]').','),
+ (bsnl ' '.(crpt '[C]blo').','),
+ (bsnl ' '.(crpt '[C]bhi').','),
+ (bsnl ' '.(crpt '[C]bboxlo').','),
+ (bsnl ' '.(crpt '[C]bboxhi').','),
+ (bsnl ' 1)'),
+ (nl ''),
+ (bsnl '#define CCTK_ENDLOOP[DIM]_INTBOUNDARIES(name)'),
+ (bsnl ' CCTK_ENDLOOP[DIM]STR_INTBOUNDARIES(name)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]STR_INTBOUNDARIES_DECLARE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_NORMAL_DECLARE(name/**/_intboundaries)'),
+ (bsnl ' && integer :: name/**/2_blo([DIM]), name/**/2_bhi([DIM])'),
+ (bsnl ' && integer :: name/**/2_bboxlo([DIM]), name/**/2_bboxhi([DIM])'),
+ (bsnl ' && integer :: name/**/2_istr'),
+ (rpt (bsnl ' && integer :: name/**/2_[C]dir')),
+ (bsnl ' && logical :: name/**/2_any_bbox, name/**/2_all_bbox'),
+ (bsnl ' && integer :: name/**/2_bmin([DIM]), name/**/2_bmax([DIM])'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]STR_INTBOUNDARIES_OMP_PRIVATE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_NORMAL_OMP_PRIVATE(name/**/_intboundaries)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]STR_INTBOUNDARIES(name,'),
+ (bsnl ' '.(crpt '[C]').','),
+ (bsnl ' '.(crpt 'n[C]').','),
+ (bsnl ' '.(crpt '[C]blo').','),
+ (bsnl ' '.(crpt '[C]bhi').','),
+ (bsnl ' '.(crpt '[C]bboxlo').','),
+ (bsnl ' '.(crpt '[C]bboxhi').','),
+ (bsnl ' 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 */'),
+ (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')),
+ (rpt (bsnl ' && if (name/**/2_[C]dir==+1) name/**/2_any_bbox = name/**/2_any_bbox .or. name/**/2_bboxhi([I+1]) /= 0')),
+ (bsnl ' && name/**/2_all_bbox = .true.'),
+ (rpt (bsnl ' && if (name/**/2_[C]dir==-1) name/**/2_all_bbox = name/**/2_all_bbox .and. name/**/2_bboxlo([I+1]) /= 0')),
+ (rpt (bsnl ' && if (name/**/2_[C]dir==+1) name/**/2_all_bbox = name/**/2_all_bbox .and. name/**/2_bboxhi([I+1]) /= 0')),
+ (bsnl ' && if (name/**/2_all_bbox .and. name/**/2_any_bbox) then'),
+ (rpt (bsnl ' && if (name/**/2_[C]dir==-1) name/**/2_bmin([I+1]) = 1')),
+ (rpt (bsnl ' && if (name/**/2_[C]dir== 0) name/**/2_bmin([I+1]) = name/**/2_blo([I+1])+1')),
+ (rpt (bsnl ' && if (name/**/2_[C]dir==+1) name/**/2_bmin([I+1]) = cctk_lsh([I+1]) - name/**/2_bhi([I+1])')),
+ (rpt (bsnl ' && if (name/**/2_[C]dir==-1) name/**/2_bmax([I+1]) = name/**/2_blo([I+1])')),
+ (rpt (bsnl ' && if (name/**/2_[C]dir== 0) name/**/2_bmax([I+1]) = cctk_lsh([I+1]) - name/**/2_bhi([I+1])')),
+ (rpt (bsnl ' && if (name/**/2_[C]dir==+1) name/**/2_bmax([I+1]) = cctk_lsh([I+1])')),
+ (bsnl ' CCTK_LOOP[DIM]STR_NORMAL(name/**/_intboundaries,'),
+ (bsnl ' '.(crpt '[C]').','),
+ (bsnl ' '.(crpt 'n[C]').','),
+ (bsnl ' '.(crpt 'name/**/2_[C]dir').','),
+ (bsnl ' '.(crpt 'name/**/2_bmin([I+1])').','),
+ (bsnl ' '.(crpt 'name/**/2_bmax([I+1])').','),
+ (rpt (bsnl ' cctk_ash([I+1]),')),
+ (bsnl ' name/**/2_istr)'),
+ (nl ''),
+ (bsnl '#define CCTK_ENDLOOP[DIM]STR_INTBOUNDARIES(name)'),
+ (bsnl ' CCTK_ENDLOOP[DIM]STR_NORMAL(name/**/_intboundaries)'),
+ (bsnl ' && end if /* bbox */'),
+ (rpt (bsnl ' && end do /* dir */')),
+ (nl ''),
+ (nl ''),
+ (nl ''),
+ (nl '/* LOOP_ALL */'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]_ALL_DECLARE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_ALL_DECLARE(name)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]_ALL_OMP_PRIVATE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_ALL_OMP_PRIVATE(name)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]_ALL(name,'),
+ (bsnl ' '.(crpt '[C]').')'),
+ (bsnl ' CCTK_LOOP[DIM]STR_ALL(name,'),
+ (bsnl ' '.(crpt '[C]').','),
+ (bsnl ' 1)'),
+ (nl ''),
+ (bsnl '#define CCTK_ENDLOOP[DIM]_ALL(name)'),
+ (bsnl ' CCTK_ENDLOOP[DIM]STR_ALL(name)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]STR_ALL_DECLARE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_DECLARE(name/**/_all)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]STR_ALL_OMP_PRIVATE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_OMP_PRIVATE(name/**/_all)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]STR_ALL(name,'),
(bsnl ' '.(crpt '[C]').','),
- (bsnl ' '.(crpt 'lc_bmin([I+1])').','),
- (bsnl ' '.(crpt 'lc_bmax([I+1])').','),
- (bsnl ' '.(crpt 'cctk_ash([I+1])').','),
- (bsnl ' lc_istr)'),
+ (bsnl ' 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)'),
(nl ''),
- (bsnl '#define CCTK_ENDLOOP[DIM]_BOUNDARIES(name)'),
- (bsnl ' CCTK_ENDLOOP[DIM]STR_BOUNDARIES(name)'),
+ (bsnl '#define CCTK_ENDLOOP[DIM]STR_ALL(name)'),
+ (bsnl ' CCTK_ENDLOOP[DIM]STR(name/**/_all)'),
(nl ''),
- (bsnl '#define CCTK_ENDLOOP[DIM]STR_BOUNDARIES(name)'),
- (bsnl ' CCTK_ENDLOOP[DIM](name)'),
- (bsnl ' && end do /* face */'),
- (bsnl ' && end do /* dir */'),
+ (nl ''),
+ (nl ''),
+ (nl '/* LOOP_INT */'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]_INT_DECLARE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_INT_DECLARE(name)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]_INT_OMP_PRIVATE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_INT_OMP_PRIVATE(name)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]_INT(name,'),
+ (bsnl ' '.(crpt '[C]').')'),
+ (bsnl ' CCTK_LOOP[DIM]STR_INT(name,'),
+ (bsnl ' '.(crpt '[C]').','),
+ (bsnl ' 1)'),
+ (nl ''),
+ (bsnl '#define CCTK_ENDLOOP[DIM]_INT(name)'),
+ (bsnl ' CCTK_ENDLOOP[DIM]STR_INT(name)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]STR_INT_DECLARE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_INTERIOR_DECLARE(name/**/_int)'),
+ (bsnl ' && integer :: name/**/3_bndsize ([2*DIM])'),
+ (bsnl ' && integer :: name/**/3_is_ghostbnd([2*DIM])'),
+ (bsnl ' && integer :: name/**/3_is_symbnd ([2*DIM])'),
+ (bsnl ' && integer :: name/**/3_is_physbnd ([2*DIM])'),
+ (bsnl ' && integer :: name/**/3_ierr'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]STR_INT_OMP_PRIVATE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_INTERIOR_OMP_PRIVATE(name/**/_int)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]STR_INT(name,'),
+ (bsnl ' '.(crpt '[C]').','),
+ (bsnl ' 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)'),
+ (bsnl ' && !$omp end single copyprivate(name/**/3_bndsize)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_INTERIOR(name/**/_int,'),
+ (bsnl ' '.(crpt '[C]').','),
+ (bsnl ' '.(crpt 'name/**/3_bndsize([2*I+1]+1)').','),
+ (bsnl ' '.(crpt 'name/**/3_bndsize([2*I+2])').','),
+ (bsnl ' (istr))'),
+ (nl ''),
+ (bsnl '#define CCTK_ENDLOOP[DIM]STR_INT(name)'),
+ (bsnl ' CCTK_ENDLOOP[DIM]STR_INTERIOR(name/**/int)'),
+ (nl ''),
+ (nl ''),
+ (nl ''),
+ (nl '/* LOOP_BND */'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]_BND_DECLARE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_BND_DECLARE(name)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]_BND_OMP_PRIVATE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_BND_OMP_PRIVATE(name)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]_BND(name,'),
+ (bsnl ' '.(crpt '[C]').','),
+ (bsnl ' '.(crpt 'n[C]').')'),
+ (bsnl ' CCTK_LOOP[DIM]STR_BND(name,'),
+ (bsnl ' '.(crpt '[C]').','),
+ (bsnl ' '.(crpt 'n[C]').','),
+ (bsnl ' 1)'),
+ (nl ''),
+ (bsnl '#define CCTK_ENDLOOP[DIM]_BND(name)'),
+ (bsnl ' CCTK_ENDLOOP[DIM]STR_BND(name)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]STR_BND_DECLARE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_BOUNDARIES_DECLARE(name/**/_bnd)'),
+ (bsnl ' && integer :: name/**/3_bndsize ([2*DIM])'),
+ (bsnl ' && integer :: name/**/3_is_ghostbnd([2*DIM])'),
+ (bsnl ' && integer :: name/**/3_is_symbnd ([2*DIM])'),
+ (bsnl ' && integer :: name/**/3_is_physbnd ([2*DIM])'),
+ (bsnl ' && integer :: name/**/3_ierr'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]STR_BND_OMP_PRIVATE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_BOUNDARIES_OMP_PRIVATE(name/**/_bnd)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]STR_BND(name,'),
+ (bsnl ' '.(crpt '[C]').','),
+ (bsnl ' '.(crpt 'n[C]').','),
+ (bsnl ' 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)'),
+ (bsnl ' && !$omp end single copyprivate(name/**/3_bndsize, name/**/3_is_physbnd)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_BOUNDARIES(name/**/_bnd,'),
+ (bsnl ' '.(crpt '[C]').','),
+ (bsnl ' '.(crpt 'n[C]').','),
+ (bsnl ' '.(crpt 'name/**/3_bndsize([2*I+1])+1').','),
+ (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))'),
+ (nl ''),
+ (bsnl '#define CCTK_ENDLOOP[DIM]STR_BND(name)'),
+ (bsnl ' CCTK_ENDLOOP[DIM]STR_BOUNDARIES(name/**/_bnd)'),
+ (nl ''),
+ (nl ''),
+ (nl ''),
+ (nl ''),
+ (nl ''),
+ (nl ''),
+ (nl '/* LOOP_INTBND */'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]_INTBND_DECLARE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_INTBND_DECLARE(name)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]_INTBND_OMP_PRIVATE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_INTBND_OMP_PRIVATE(name)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]_INTBND(name,'),
+ (bsnl ' '.(crpt '[C]').','),
+ (bsnl ' '.(crpt 'n[C]').')'),
+ (bsnl ' CCTK_LOOP[DIM]STR_INTBND(name,'),
+ (bsnl ' '.(crpt '[C]').','),
+ (bsnl ' '.(crpt 'n[C]').','),
+ (bsnl ' 1)'),
+ (nl ''),
+ (bsnl '#define CCTK_ENDLOOP[DIM]_INTBND(name)'),
+ (bsnl ' CCTK_ENDLOOP[DIM]STR_INTBND(name)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]STR_INTBND_DECLARE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_INTBOUNDARIES_DECLARE(name/**/_bnd)'),
+ (bsnl ' && integer :: name/**/3_bndsize ([2*DIM])'),
+ (bsnl ' && integer :: name/**/3_is_ghostbnd([2*DIM])'),
+ (bsnl ' && integer :: name/**/3_is_symbnd ([2*DIM])'),
+ (bsnl ' && integer :: name/**/3_is_physbnd ([2*DIM])'),
+ (bsnl ' && integer :: name/**/3_ierr'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]STR_INTBND_OMP_PRIVATE(name)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_INTBOUNDARIES_OMP_PRIVATE(name/**/_bnd)'),
+ (nl ''),
+ (bsnl '#define CCTK_LOOP[DIM]STR_INTBND(name,'),
+ (bsnl ' '.(crpt '[C]').','),
+ (bsnl ' '.(crpt 'n[C]').','),
+ (bsnl ' 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)'),
+ (bsnl ' && !$omp end single copyprivate(name/**/3_bndsize, name/**/3_is_physbnd)'),
+ (bsnl ' CCTK_LOOP[DIM]STR_INTBOUNDARIES(name/**/_bnd,'),
+ (bsnl ' '.(crpt '[C]').','),
+ (bsnl ' '.(crpt 'n[C]').','),
+ (bsnl ' '.(crpt 'name/**/3_bndsize([2*I+1]+1)').','),
+ (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))'),
+ (nl ''),
+ (bsnl '#define CCTK_ENDLOOP[DIM]STR_INTBND(name)'),
+ (bsnl ' CCTK_ENDLOOP[DIM]STR_INTBOUNDARIES(name/**/_bnd)'),
(nl ''),
(nl '#endif /* #ifdef FCODE */'),
);