<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.19" xml:lang="en-US">
  <compounddef id="interfacemom__coms_1_1reproducing__sum" kind="interface" language="Fortran" prot="private">
    <compoundname>mom_coms::reproducing_sum</compoundname>
      <sectiondef kind="private-func">
      <memberdef kind="function" id="interfacemom__coms_1_1reproducing__sum_1ab2f6e6add0bf919823551d1bb480d37c" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>real function</type>
        <definition>real function mom_coms::reproducing_sum::reproducing_sum_2d</definition>
        <argsstring>(array, isr, ier, jsr, jer, EFP_sum, reproducing, overflow_check, err, only_on_PE)</argsstring>
        <name>reproducing_sum_2d</name>
        <param>
          <type>array</type>
          <defname>array</defname>
        </param>
        <param>
          <type>isr</type>
          <defname>isr</defname>
        </param>
        <param>
          <type>ier</type>
          <defname>ier</defname>
        </param>
        <param>
          <type>jsr</type>
          <defname>jsr</defname>
        </param>
        <param>
          <type>jer</type>
          <defname>jer</defname>
        </param>
        <param>
          <type>EFP_sum</type>
          <defname>EFP_sum</defname>
        </param>
        <param>
          <type>reproducing</type>
          <defname>reproducing</defname>
        </param>
        <param>
          <type>overflow_check</type>
          <defname>overflow_check</defname>
        </param>
        <param>
          <type>err</type>
          <defname>err</defname>
        </param>
        <param>
          <type>only_on_PE</type>
          <defname>only_on_PE</defname>
        </param>
        <briefdescription>
<para>This subroutine uses a conversion to an integer representation of real numbers to give an order-invariant sum of distributed 2-D arrays that reproduces across domain decomposition. This technique is described in Hallberg &amp; Adcroft, 2014, Parallel Computing, doi:10.1016/j.parco.2014.04.007. </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="in">array</parametername>
</parameternamelist>
<parameterdescription>
<para>The array to be summed </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">isr</parametername>
</parameternamelist>
<parameterdescription>
<para>The starting i-index of the sum, noting that the array indices starts at 1 </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">ier</parametername>
</parameternamelist>
<parameterdescription>
<para>The ending i-index of the sum, noting that the array indices starts at 1 </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">jsr</parametername>
</parameternamelist>
<parameterdescription>
<para>The starting j-index of the sum, noting that the array indices starts at 1 </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">jer</parametername>
</parameternamelist>
<parameterdescription>
<para>The ending j-index of the sum, noting that the array indices starts at 1 </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="out">efp_sum</parametername>
</parameternamelist>
<parameterdescription>
<para>The result in extended fixed point format </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">reproducing</parametername>
</parameternamelist>
<parameterdescription>
<para>If present and false, do the sum using the naive non-reproducing approach </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">overflow_check</parametername>
</parameternamelist>
<parameterdescription>
<para>If present and false, disable checking for overflows in incremental results. This can speed up calculations if the number of values being summed is small enough </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="out">err</parametername>
</parameternamelist>
<parameterdescription>
<para>If present, return an error code instead of triggering any fatal errors directly from this routine. </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">only_on_pe</parametername>
</parameternamelist>
<parameterdescription>
<para>If present and true, do not do the sum across processors, only reporting the local sum </para>
</parameterdescription>
</parameteritem>
</parameterlist>
<simplesect kind="return"><para>Result </para>
</simplesect>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="218" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="220" bodyend="316"/>
      </memberdef>
      <memberdef kind="function" id="interfacemom__coms_1_1reproducing__sum_1a302c8e698e72494e208161ba8ca7fe87" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>real function</type>
        <definition>real function mom_coms::reproducing_sum::reproducing_sum_3d</definition>
        <argsstring>(array, isr, ier, jsr, jer, sums, EFP_sum, EFP_lay_sums, err, only_on_PE)</argsstring>
        <name>reproducing_sum_3d</name>
        <param>
          <type>array</type>
          <defname>array</defname>
        </param>
        <param>
          <type>isr</type>
          <defname>isr</defname>
        </param>
        <param>
          <type>ier</type>
          <defname>ier</defname>
        </param>
        <param>
          <type>jsr</type>
          <defname>jsr</defname>
        </param>
        <param>
          <type>jer</type>
          <defname>jer</defname>
        </param>
        <param>
          <type>sums</type>
          <defname>sums</defname>
        </param>
        <param>
          <type>EFP_sum</type>
          <defname>EFP_sum</defname>
        </param>
        <param>
          <type>EFP_lay_sums</type>
          <defname>EFP_lay_sums</defname>
        </param>
        <param>
          <type>err</type>
          <defname>err</defname>
        </param>
        <param>
          <type>only_on_PE</type>
          <defname>only_on_PE</defname>
        </param>
        <briefdescription>
<para>This subroutine uses a conversion to an integer representation of real numbers to give an order-invariant sum of distributed 3-D arrays that reproduces across domain decomposition. This technique is described in Hallberg &amp; Adcroft, 2014, Parallel Computing, doi:10.1016/j.parco.2014.04.007. </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="in">array</parametername>
</parameternamelist>
<parameterdescription>
<para>The array to be summed </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">isr</parametername>
</parameternamelist>
<parameterdescription>
<para>The starting i-index of the sum, noting that the array indices starts at 1 </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">ier</parametername>
</parameternamelist>
<parameterdescription>
<para>The ending i-index of the sum, noting that the array indices starts at 1 </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">jsr</parametername>
</parameternamelist>
<parameterdescription>
<para>The starting j-index of the sum, noting that the array indices starts at 1 </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">jer</parametername>
</parameternamelist>
<parameterdescription>
<para>The ending j-index of the sum, noting that the array indices starts at 1 </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="out">sums</parametername>
</parameternamelist>
<parameterdescription>
<para>The sums by vertical layer </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="out">efp_sum</parametername>
</parameternamelist>
<parameterdescription>
<para>The result in extended fixed point format </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="out">efp_lay_sums</parametername>
</parameternamelist>
<parameterdescription>
<para>The sums by vertical layer in EFP format </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="out">err</parametername>
</parameternamelist>
<parameterdescription>
<para>If present, return an error code instead of triggering any fatal errors directly from this routine. </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">only_on_pe</parametername>
</parameternamelist>
<parameterdescription>
<para>If present and true, do not do the sum across processors, only reporting the local sum </para>
</parameterdescription>
</parameteritem>
</parameterlist>
<simplesect kind="return"><para>Result </para>
</simplesect>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="323" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="325" bodyend="503"/>
      </memberdef>
      </sectiondef>
    <briefdescription>
<para>Find an accurate and order-invariant sum of a distributed 2d or 3d field. </para>
    </briefdescription>
    <detaileddescription>
    </detaileddescription>
    <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="53" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="53" bodyend="54"/>
    <listofallmembers>
      <member refid="interfacemom__coms_1_1reproducing__sum_1ab2f6e6add0bf919823551d1bb480d37c" prot="private" virt="non-virtual"><scope>mom_coms::reproducing_sum</scope><name>reproducing_sum_2d</name></member>
      <member refid="interfacemom__coms_1_1reproducing__sum_1a302c8e698e72494e208161ba8ca7fe87" prot="private" virt="non-virtual"><scope>mom_coms::reproducing_sum</scope><name>reproducing_sum_3d</name></member>
    </listofallmembers>
  </compounddef>
</doxygen>
