diff options
author | eschnett <eschnett@17b73243-c579-4c4c-a9d2-2d5706c11dac> | 2012-09-19 15:27:34 +0000 |
---|---|---|
committer | eschnett <eschnett@17b73243-c579-4c4c-a9d2-2d5706c11dac> | 2012-09-19 15:27:34 +0000 |
commit | 4a68eb77e50d9dae0422fed4338f6146c37625dc (patch) | |
tree | b15aecd81059870da92523de1fb2a5affe53d103 /src/include/cctk_Loop.h.pl | |
parent | 2b471273798ec4a698eca6783f2de9057ca6584f (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-x | src/include/cctk_Loop.h.pl | 553 |
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 */'), ); |