<html>#2386: CCTK_LOOP3_INT and friends broken for Fortran OpenMP code
<table style='border-spacing: 1ex 0pt; '>
<tr><td style='text-align:right'> Reporter:</td><td>Roland Haas</td></tr>
<tr><td style='text-align:right'>   Status:</td><td>open</td></tr>
<tr><td style='text-align:right'>Milestone:</td><td></td></tr>
<tr><td style='text-align:right'>  Version:</td><td></td></tr>
<tr><td style='text-align:right'>     Type:</td><td>bug</td></tr>
<tr><td style='text-align:right'> Priority:</td><td>minor</td></tr>
<tr><td style='text-align:right'>Component:</td><td></td></tr>
</table>

<p>Comment (by Roland Haas):</p>
<p>I have implemented a version (1.5) which is halfway in between (1) and (2) ie requires that users declare <code>i,j,k</code> and <code>ni,nj,nk</code> themselves but list them in the <code>OMP_PRIVATE</code> etc macros. This means that one can use “nice” names for the user visible loop variables even when there are multiple loops, which is not possible when all variables are declared by the <code>DECLARE_XXX</code> macros and still has some safety checks in place ensuring that the variables are marked as private to OpenMP. Example code would be in <code>CactusTest/TestLoop</code> in the <code>rhaas/loops</code> branch:</p>
<div class="codehilite language-fortran"><pre><span></span><span class="k">subroutine </span><span class="n">TestLoopFortran_intbnd</span><span class="p">(</span><span class="n">CCTK_ARGUMENTS</span><span class="p">)</span>
  <span class="k">implicit none</span>
<span class="k">  </span><span class="n">DECLARE_CCTK_ARGUMENTS</span>
  <span class="n">DECLARE_CCTK_FUNCTIONS</span>
  <span class="n">DECLARE_CCTK_PARAMETERS</span>

  <span class="n">CCTK_LOOP3_INTBND_DECLARE</span><span class="p">(</span><span class="n">intbnd3</span><span class="p">)</span>
  <span class="kt">integer</span>   <span class="kd">::</span> <span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="p">,</span><span class="n">k</span>
  <span class="kt">integer</span>   <span class="kd">::</span> <span class="n">n_i</span><span class="p">,</span><span class="n">n_j</span><span class="p">,</span><span class="n">n_k</span>
  <span class="n">CCTK_REAL</span> <span class="kd">::</span> <span class="n">fsum</span>

  <span class="k">call </span><span class="n">CCTK_INFO</span><span class="p">(</span><span class="s2">&quot;TestLoopFortran_intbnd&quot;</span><span class="p">)</span>
  <span class="n">fsum</span> <span class="o">=</span> <span class="mi">0</span>
  <span class="c">!$OMP PARALLEL &amp;</span>
  <span class="c">!$OMP default(none) shared(cctkgh, cctk_ash, cctk_lsh, cctk_tile_min, cctk
<p>--<br/>
Ticket URL: <a href='https://bitbucket.org/einsteintoolkit/tickets/issues/2386/cctk_loop3_int-and-friends-broken-for'>https://bitbucket.org/einsteintoolkit/tickets/issues/2386/cctk_loop3_int-and-friends-broken-for</a></p>
</html>