<html>#2925: overflow in rat<int64> in Arith
<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></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>Arith implements rational numbers which are used by CarpetX to track iterations on refinement levels, so that it can handle the fractional times of the coarse step that are used by refined levels. </p>
<p>In <a href="https://github.com/EinsteinToolkit/CarpetX/pull/377#pullrequestreview-3994686849" rel="nofollow" class="ap-connect-link">https://github.com/EinsteinToolkit/CarpetX/pull/377#pullrequestreview-3994686849</a> I had to find the maximum and minimum iteration used during interpolation and a code putting an elephant in a known location:</p>
<div class="codehilite"><pre><span></span><code><span class="gh">diff --git a/CarpetX/src/interpolate.cxx b/CarpetX/src/interpolate.cxx</span>
<span class="gh">index eee39a9a..2c490c68 100644</span>
<span class="gd">--- a/CarpetX/src/interpolate.cxx</span>
<span class="gi">+++ b/CarpetX/src/interpolate.cxx</span>
<span class="gu">@@ -664,6 +664,11 @@ extern "C" void CarpetX_Interpolate(const CCTK_POINTER_TO_CONST cctkGH_,</span>
givis.at(v) = {gi, vi};
}
<span class="gi">+ rat64 min_level_iteration_used =</span>
<span class="gi">+ std::numeric_limits<decltype(min_level_iteration_used.num)>::max();</span>
<span class="gi">+ rat64 max_level_iteration_used =</span>
<span class="gi">+ std::numeric_limits<decltype(max_level_iteration_used.num)>::min();</span>
<span class="gi">+ bool requires_interpolation_in_time = false;</span>
for (const auto &patchdata : ghext->patchdata) {
const int patch = patchdata.patch;
for (const auto &leveldata : patchdata.leveldata) {
<span class="gu">@@ -676,6 +681,11 @@ extern "C" void CarpetX_Interpolate(const CCTK_POINTER_TO_CONST cctkGH_,</span>
const GridDesc grid(leveldata, mfp);
// const int component = mfp.index();
<span class="gi">+ min_level_iteration_used =</span>
<span class="gi">+ std::min(min_level_iteration_used, leveldata.iteration);</span>
<span class="gi">+ max_level_iteration_used =</span>
<span class="gi"
<p>--<br/>
Ticket URL: <a href='https://bitbucket.org/einsteintoolkit/tickets/issues/2925/overflow-in-rat-in-arith'>https://bitbucket.org/einsteintoolkit/tickets/issues/2925/overflow-in-rat-in-arith</a></p>
</html>