<div dir="ltr">Dear Roland,<div>in the above you say that</div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="gmail-im" style="color:rgb(80,0,80)">&gt; We were using Carpet and the actual call was to<br></span><span class="gmail-im" style="color:rgb(80,0,80)">&gt;<br></span><span class="gmail-im" style="color:rgb(80,0,80)">&gt; CCTK_ReduceLocArrayToArray1D<br></span><span class="gmail-im" style="color:rgb(80,0,80)">&gt;<br></span><span class="gmail-im" style="color:rgb(80,0,80)">&gt; Is this valid in Carpet?<br></span>No, unfortunately this is not valid in Carpet.</blockquote><div> </div><div>but then</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">&quot;<font face="monospace">CCTK_ReduceLocArrayToArray1D</font>&quot; however is &quot;old&quot; interface, so is valid<br>with Carpet, but you must use &quot;<font face="monospace">CCTK_ReductionArrayHandle</font>&quot; to get the<br>reduction handle for it.</blockquote><div><br></div><div>So is the call to <span style="font-family:monospace">CCTK_ReduceLocArrayToArray1D</span><font face="arial, sans-serif"> valid or not in Carpet? I&#39;m asking because i</font>n Spritz we use Carpet and we have a call to <font face="monospace">CCTK_ReduceLocArrayToArray1D</font> with the handle obtained from <font face="monospace">CCTK_ReductionArrayHandle </font>(which should work according to the second thing you wrote) and this gives an error in reduction.</div><div><br></div><div>Thank you,</div></div><div>Lorenzo</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Il giorno mar 17 ago 2021 alle ore 21:55 Roland Haas &lt;<a href="mailto:rhaas@illinois.edu">rhaas@illinois.edu</a>&gt; ha scritto:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hello Yosef,<br>
<br>
&gt; Thanks. One final question, when using CCTK_Reduce, which should we<br>
&gt; use CCTK_ReductionArrayHandle to get the handle?<br>
CCTK_Reduce is &quot;old&quot; inerface but for grid-functions (and grid arrays)<br>
but not local arrays. For for CCTK_Reduce you must use<br>
CCTK_ReductionHandle and use the handle returned by it.<br>
<br>
The reason for two different types of handles and two different<br>
functions (CCTK_ReductionArrayHandle and CCTK_ReductionHandle) is that<br>
these are actually different reduction operator functions registered by<br>
CarpetReduce.<br>
<br>
The handle number depends on the order in which they are registered. It<br>
just so happens that Carpet registers functions for operations in<br>
CCTK_Reduce and CCTK_ReduceReduceLocalArray1D in the same order (and<br>
supports the same operations for both). So eg the &quot;sum&quot; name ended up<br>
being the same handle integer for both. This was *purely* by accident<br>
and *entirely* dependent on the order in which Carpet called the two<br>
respective Registration functions and in fact the registered functions<br>
(for CCTK_Reduce and CCTK_ReduceReduceLocalArray1D) are different.<br>
<br>
The respective CarpetReduce code (in reduce.c) is:<br>
<br>
  CCTK_RegisterReductionOperator(count_GVs, &quot;count&quot;);<br>
  CCTK_RegisterReductionOperator(minimum_GVs, &quot;minimum&quot;);<br>
  CCTK_RegisterReductionOperator(maximum_GVs, &quot;maximum&quot;);<br>
  CCTK_RegisterReductionOperator(product_GVs, &quot;product&quot;);<br>
  CCTK_RegisterReductionOperator(sum_GVs, &quot;sum&quot;);<br>
  CCTK_RegisterReductionOperator(sum_abs_GVs, &quot;sum_abs&quot;);<br>
  CCTK_RegisterReductionOperator(sum_squared_GVs, &quot;sum_squared&quot;);<br>
  CCTK_RegisterReductionOperator(sum_abs_squared_GVs, &quot;sum_abs_squared&quot;);<br>
  CCTK_RegisterReductionOperator(average_GVs, &quot;average&quot;);<br>
  CCTK_RegisterReductionOperator(norm1_GVs, &quot;norm1&quot;);<br>
  CCTK_RegisterReductionOperator(norm2_GVs, &quot;norm2&quot;);<br>
  CCTK_RegisterReductionOperator(norm_inf_GVs, &quot;norm_inf&quot;);<br>
<br>
[...]<br>
<br>
  CCTK_RegisterReductionArrayOperator(count_arrays, &quot;count&quot;);<br>
  CCTK_RegisterReductionArrayOperator(minimum_arrays, &quot;minimum&quot;);<br>
  CCTK_RegisterReductionArrayOperator(maximum_arrays, &quot;maximum&quot;);<br>
  CCTK_RegisterReductionArrayOperator(product_arrays, &quot;product&quot;);<br>
  CCTK_RegisterReductionArrayOperator(sum_arrays, &quot;sum&quot;);<br>
  CCTK_RegisterReductionArrayOperator(sum_abs_arrays, &quot;sum_abs&quot;);<br>
  CCTK_RegisterReductionArrayOperator(sum_squared_arrays, &quot;sum_squared&quot;);<br>
  CCTK_RegisterReductionArrayOperator(sum_abs_squared_arrays,<br>
                                      &quot;sum_abs_squared&quot;);<br>
  CCTK_RegisterReductionArrayOperator(average_arrays, &quot;average&quot;);<br>
  CCTK_RegisterReductionArrayOperator(norm1_arrays, &quot;norm1&quot;);<br>
  CCTK_RegisterReductionArrayOperator(norm2_arrays, &quot;norm2&quot;);<br>
  CCTK_RegisterReductionArrayOperator(norm_inf_arrays, &quot;norm_inf&quot;);<br>
<br>
<br>
Yours,<br>
Roland<br>
<br>
&gt; <br>
&gt; <br>
&gt; On 8/17/21 3:01 PM, Roland Haas wrote:<br>
&gt; &gt; Hello Yosef,<br>
&gt; &gt;  <br>
&gt; &gt;&gt; We were using Carpet and the actual call was to<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; CCTK_ReduceLocArrayToArray1D<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Is this valid in Carpet?  <br>
&gt; &gt; No, unfortunately this is not valid in Carpet.<br>
&gt; &gt;<br>
&gt; &gt; For two reasons actually:<br>
&gt; &gt;<br>
&gt; &gt; The combination CCTK_LocalArrayReductionHandle and<br>
&gt; &gt; CCTK_ReduceLocArrayToArray1D is never valid, since<br>
&gt; &gt; CCTK_LocalArrayReductionHandle  is &quot;new&quot; interface, while<br>
&gt; &gt; CCTK_ReduceLocArrayToArray1D is &quot;old&quot; interface. You can see it<br>
&gt; &gt; among the list of functions in my previous email.<br>
&gt; &gt;<br>
&gt; &gt; Further &quot;CCTK_LocalArrayReductionHandle&quot;, being &quot;new&quot; interface, is<br>
&gt; &gt; never valid for Carpet, since Carpet only supports the &quot;old&quot;<br>
&gt; &gt; interface.<br>
&gt; &gt;<br>
&gt; &gt; So &quot;no&quot;, &quot;no&quot;.<br>
&gt; &gt;<br>
&gt; &gt; &quot;CCTK_ReduceLocArrayToArray1D&quot; however is &quot;old&quot; interface, so is<br>
&gt; &gt; valid with Carpet, but you must use &quot;CCTK_ReductionArrayHandle&quot; to<br>
&gt; &gt; get the reduction handle for it. You must *not* use<br>
&gt; &gt; &quot;CCCTK_ReductionHandle&quot; or &quot;CCTK_LocalArrayReductionHandle&quot; to get<br>
&gt; &gt; a handle to use with &quot;CCTK_ReduceLocArrayToArray1D&quot;.<br>
&gt; &gt;<br>
&gt; &gt; Nope this helps. The functions names a confusing, unfortunately,<br>
&gt; &gt; and the fact that the &quot;old&quot; interface, which is the only one Carpet<br>
&gt; &gt; supports, is not fully documented in the CCTK reference anymore,<br>
&gt; &gt; does not really help.<br>
&gt; &gt;<br>
&gt; &gt; Yours,<br>
&gt; &gt; Roland<br>
&gt; &gt;  <br>
&gt; &gt;&gt; On 8/17/21 12:59 PM, Roland Haas wrote:  <br>
&gt; &gt;&gt;&gt; Hello Yosef,<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; there&#39;s a couple different reduction interfaces and the handle<br>
&gt; &gt;&gt;&gt; you get must match.<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; It depends a bit on the drive you are using.<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; Carpet only supports the &quot;old style&quot; reduction interface that<br>
&gt; &gt;&gt;&gt; uses:<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; CCTK_Reduce<br>
&gt; &gt;&gt;&gt; CCTK_ReductionHandle<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; CCTK_ReduceLocalScalar<br>
&gt; &gt;&gt;&gt; CCTK_ReductionArrayHandle<br>
&gt; &gt;&gt;&gt; and:<br>
&gt; &gt;&gt;&gt; CCTK_ReduceArray<br>
&gt; &gt;&gt;&gt; CCTK_ReduceLocalArray1D<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; it does not support the new interface<br>
&gt; &gt;&gt;&gt; CCTK_LocalArrayReductionHandle at all.<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; PUGH supports the new one and (I think) the old one as well. The<br>
&gt; &gt;&gt;&gt; new one uses:<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; CTK_LocalArrayReductionHandle<br>
&gt; &gt;&gt;&gt; CCTK_ReduceLocalArrays<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; See<br>
&gt; &gt;&gt;&gt; <a href="https://urldefense.com/v3/__https://www.einsteintoolkit.org/referencemanual/ReferenceManual.html*x1-1000A__;Iw!!DZ3fjg!vO69j0_NDEC1JMkgMyZSdz57Nk1EjyHTBh3FU214vo8W15081AZ6_X93p6b5_AlO$" rel="noreferrer" target="_blank">https://urldefense.com/v3/__https://www.einsteintoolkit.org/referencemanual/ReferenceManual.html*x1-1000A__;Iw!!DZ3fjg!vO69j0_NDEC1JMkgMyZSdz57Nk1EjyHTBh3FU214vo8W15081AZ6_X93p6b5_AlO$</a><br>
&gt; &gt;&gt;&gt;  and search for A488.<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; So are you using this with PUGH or Carpet? With Carpet it must<br>
&gt; &gt;&gt;&gt; fail (not supported at all), with PUGH it should work as long as<br>
&gt; &gt;&gt;&gt; you sue the correct set of calls ie<br>
&gt; &gt;&gt;&gt; CCTK_LocalArrayReductionHandle + CCTK_ReduceLocalArrays (for PUGH<br>
&gt; &gt;&gt;&gt; only).<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; Yours,<br>
&gt; &gt;&gt;&gt; Roland  <br>
&gt; &gt;&gt;&gt;   &gt;&gt;&gt;&gt; Hi,  <br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;     A code that we are using seems to no longer work with<br>
&gt; &gt;&gt;&gt;&gt; Cactus. The issue seems to be that the code called<br>
&gt; &gt;&gt;&gt;&gt; CCTK_LocalArrayReductionHandle. The code, as checked out,<br>
&gt; &gt;&gt;&gt;&gt; produces errors because the appropriate handle isn&#39;t found. If I<br>
&gt; &gt;&gt;&gt;&gt; modify the function as below,  I no longer get the error message<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt; int CCTK_LocalArrayReductionHandle(const char *reduction)<br>
&gt; &gt;&gt;&gt;&gt; {<br>
&gt; &gt;&gt;&gt;&gt;      int handle;<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;      handle = Util_GetHandle(LocalArrayReductionOperators,<br>
&gt; &gt;&gt;&gt;&gt; reduction, NULL); if (handle &lt; 0)<br>
&gt; &gt;&gt;&gt;&gt;      {<br>
&gt; &gt;&gt;&gt;&gt;        CCTK_VWarn(1,__LINE__,__FILE__,&quot;Cactus&quot;,<br>
&gt; &gt;&gt;&gt;&gt;                   &quot;CCTK_LocalArrayReductionHandle: No handle:<br>
&gt; &gt;&gt;&gt;&gt; &#39;%d&#39; found for reduction operator &quot;<br>
&gt; &gt;&gt;&gt;&gt;                   &quot;&#39;%s&#39;&quot;, handle, reduction);<br>
&gt; &gt;&gt;&gt;&gt;      }<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;      handle += ARRAY_OPERATOR_HANDLE_OFFSET; //// MY changes<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;      return handle;<br>
&gt; &gt;&gt;&gt;&gt; }<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;&gt; Should we no longer use CCTK_LocalArrayReductionHandle?  <br>
&gt; &gt;&gt;&gt;&gt;   &gt;&gt;&gt;   &gt;  <br>
&gt; &gt;  <br>
<br>
<br>
<br>
-- <br>
My email is as private as my paper mail. I therefore support encrypting<br>
and signing email messages. Get my PGP key from <a href="http://pgp.mit.edu" rel="noreferrer" target="_blank">http://pgp.mit.edu</a> .<br>
_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@einsteintoolkit.org" target="_blank">Users@einsteintoolkit.org</a><br>
<a href="http://lists.einsteintoolkit.org/mailman/listinfo/users" rel="noreferrer" target="_blank">http://lists.einsteintoolkit.org/mailman/listinfo/users</a><br>
</blockquote></div>