<html>#2493: CarpetLib''s minval and maxval always return first element
<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>new</td></tr>
<tr><td style='text-align:right'>Milestone:</td><td></td></tr>
<tr><td style='text-align:right'>  Version:</td><td>development version</td></tr>
<tr><td style='text-align:right'>     Type:</td><td>bug</td></tr>
<tr><td style='text-align:right'> Priority:</td><td>major</td></tr>
<tr><td style='text-align:right'>Component:</td><td>Carpet</td></tr>
</table>

<p>This code:</p>
<div class="codehilite language-c++"><pre><span></span><span class="n">ivect</span> <span class="n">tst</span><span class="p">;</span>
<span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span> <span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="mi">3</span> <span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
  <span class="n">tst</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="mi">3</span><span class="o">-</span><span class="n">i</span><span class="p">;</span>
<span class="n">std</span><span class="o">::</span><span class="n">cerr</span><span class="o">&lt;&lt;</span><span class="s">&quot;tst: &quot;</span><span class="o">&lt;&lt;</span><span class="n">tst</span><span class="o">&lt;&lt;</span><span class="s">&quot; minval: &quot;</span><span class="o">&lt;&lt;</span><span class="n">minval</span><span class="p">(</span><span class="n">tst</span><span class="p">)</span><span class="o">&lt;&lt;</span><span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">;</span>
</pre></div>


<p>outputs:</p>
<div class="codehilite"><pre><span></span>tst: [3,2,1] minval: 3
</pre></div>


<p>and as far as I an tell this is due to the <code>DECLARE_REDUCTION_FUNCTION_1</code> macro used in </p>
<div class="codehilite"><pre><span></span>DECLARE_REDUCTION_FUNCTION_1(minval, a[0], min, ID)
</pre></div>


<p>which assumes that <code>max</code> behaves like <code>*=</code> i.e. accumulates. See <code>vect_helpers.hh</code>:</p>
<div class="codehilite language-c++"><pre><span></span><span class="cp">#define DECLARE_REDUCTION_FUNCTION_1(fn, init, op, final)                      \</span>
<span class="cp">  }                                                                            \</span>
<span class="cp">  namespace CarpetLib_vect
<p>--<br/>
Ticket URL: <a href='https://bitbucket.org/einsteintoolkit/tickets/issues/2493/carpetlibs-minval-and-maxval-always-return'>https://bitbucket.org/einsteintoolkit/tickets/issues/2493/carpetlibs-minval-and-maxval-always-return</a></p>
</html>