<?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.16">
  <compounddef id="namespacemom__coms" kind="namespace" language="Fortran">
    <compoundname>mom_coms</compoundname>
    <innerclass refid="interfacemom__coms_1_1assignment_07_0a_08" prot="private">mom_coms::assignment(=)</innerclass>
    <innerclass refid="interfacemom__coms_1_1efp__sum__across__pes" prot="private">mom_coms::efp_sum_across_pes</innerclass>
    <innerclass refid="structmom__coms_1_1efp__type" prot="public">mom_coms::efp_type</innerclass>
    <innerclass refid="interfacemom__coms_1_1operator_07_09_08" prot="public">mom_coms::operator(+)</innerclass>
    <innerclass refid="interfacemom__coms_1_1operator_07-_08" prot="private">mom_coms::operator(-)</innerclass>
    <innerclass refid="interfacemom__coms_1_1reproducing__sum" prot="private">mom_coms::reproducing_sum</innerclass>
    <innerclass refid="interfacemom__coms_1_1reproducing__sum__efp" prot="private">mom_coms::reproducing_sum_efp</innerclass>
      <sectiondef kind="var">
      <memberdef kind="variable" id="namespacemom__coms_1a53dec744e5fb972fe74863d02a5b3f7f" prot="private" static="no" mutable="no">
        <type>integer(kind=8), parameter</type>
        <definition>integer(kind=8), parameter mom_coms::prec</definition>
        <argsstring></argsstring>
        <name>prec</name>
        <initializer>=2_8**46</initializer>
        <briefdescription>
<para>The precision of each integer. </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="27" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="27" bodyend="27"/>
        <referencedby refid="namespacemom__coms_1a3fe107391eb9d2c199eb09e451f4dbb2" compoundref="MOM__coms_8F90" startline="629" endline="647">carry_overflow</referencedby>
        <referencedby refid="namespacemom__coms_1a8228dee8e8e72652d5a58f483f0dc661" compoundref="MOM__coms_8F90" startline="563" endline="591">increment_ints</referencedby>
        <referencedby refid="namespacemom__coms_1a0cc261620495abf3313937726883b95e" compoundref="MOM__coms_8F90" startline="508" endline="544">real_to_ints</referencedby>
        <referencedby refid="namespacemom__coms_1ab8feff19e782af36bb7ccccd5ba9eddc" compoundref="MOM__coms_8F90" startline="653" endline="689">regularize_ints</referencedby>
      </memberdef>
      <memberdef kind="variable" id="namespacemom__coms_1a885379ffe89eb60f2b0071abb9e8c638" prot="private" static="no" mutable="no">
        <type>real, parameter</type>
        <definition>real, parameter mom_coms::r_prec</definition>
        <argsstring></argsstring>
        <name>r_prec</name>
        <initializer>=2.0**46</initializer>
        <briefdescription>
<para>A real version of prec. </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="28" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="28" bodyend="28"/>
      </memberdef>
      <memberdef kind="variable" id="namespacemom__coms_1af2d95ca11334965b9f5ecf2593692cd7" prot="private" static="no" mutable="no">
        <type>real, parameter</type>
        <definition>real, parameter mom_coms::i_prec</definition>
        <argsstring></argsstring>
        <name>i_prec</name>
        <initializer>=1.0/(2.0**46)</initializer>
        <briefdescription>
<para>The inverse of prec. </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="29" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="29" bodyend="29"/>
        <referencedby refid="namespacemom__coms_1a3fe107391eb9d2c199eb09e451f4dbb2" compoundref="MOM__coms_8F90" startline="629" endline="647">carry_overflow</referencedby>
        <referencedby refid="namespacemom__coms_1ab8feff19e782af36bb7ccccd5ba9eddc" compoundref="MOM__coms_8F90" startline="653" endline="689">regularize_ints</referencedby>
      </memberdef>
      <memberdef kind="variable" id="namespacemom__coms_1a2aeaf40b69c9d498459bc534a38451d8" prot="private" static="no" mutable="no">
        <type>integer, parameter</type>
        <definition>integer, parameter mom_coms::max_count_prec</definition>
        <argsstring></argsstring>
        <name>max_count_prec</name>
        <initializer>=2**(63-46)-1</initializer>
        <briefdescription>
<para>The number of values that can be added together with the current value of prec before there will be roundoff problems. </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="30" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="30" bodyend="30"/>
        <referencedby refid="namespacemom__coms_1a6cbcab29d87b134dcd5c4bdb922b4344" compoundref="MOM__coms_8F90" startline="789" endline="833">efp_list_sum_across_pes</referencedby>
        <referencedby refid="namespacemom__coms_1aa6ad80e8330fc146562404a4e756916b" compoundref="MOM__coms_8F90" startline="839" endline="880">efp_val_sum_across_pes</referencedby>
        <referencedby refid="namespacemom__coms_1a81eab26b0e062043ae4b13949d90a5dc" compoundref="MOM__coms_8F90" startline="93" endline="211">reproducing_efp_sum_2d</referencedby>
        <referencedby refid="namespacemom__coms_1a82b35df61c7d0aba1712fc3ce7b47685" compoundref="MOM__coms_8F90" startline="220" endline="316">reproducing_sum_2d</referencedby>
        <referencedby refid="namespacemom__coms_1aa98bb5adb44798d397f668edf62832e8" compoundref="MOM__coms_8F90" startline="325" endline="503">reproducing_sum_3d</referencedby>
      </memberdef>
      <memberdef kind="variable" id="namespacemom__coms_1ac1760c24e671a314322e4b1b33e0db39" prot="private" static="no" mutable="no">
        <type>integer, parameter</type>
        <definition>integer, parameter mom_coms::ni</definition>
        <argsstring></argsstring>
        <name>ni</name>
        <initializer>=6</initializer>
        <briefdescription>
<para>The number of long integers to use to represent a real number. </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="35" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="35" bodyend="35"/>
        <referencedby refid="namespacemom__coms_1a3fe107391eb9d2c199eb09e451f4dbb2" compoundref="MOM__coms_8F90" startline="629" endline="647">carry_overflow</referencedby>
        <referencedby refid="namespacemom__coms_1a63ee6c200b7e9e34624430be6347fbec" compoundref="MOM__coms_8F90" startline="729" endline="736">efp_assign</referencedby>
        <referencedby refid="namespacemom__coms_1a6cbcab29d87b134dcd5c4bdb922b4344" compoundref="MOM__coms_8F90" startline="789" endline="833">efp_list_sum_across_pes</referencedby>
        <referencedby refid="namespacemom__coms_1ac9cda4ec7606fa2e47d79d759d9e6694" compoundref="MOM__coms_8F90" startline="716" endline="724">efp_minus</referencedby>
        <referencedby refid="namespacemom__coms_1aa6ad80e8330fc146562404a4e756916b" compoundref="MOM__coms_8F90" startline="839" endline="880">efp_val_sum_across_pes</referencedby>
        <referencedby refid="namespacemom__coms_1a8228dee8e8e72652d5a58f483f0dc661" compoundref="MOM__coms_8F90" startline="563" endline="591">increment_ints</referencedby>
        <referencedby refid="namespacemom__coms_1aebe91f9c9bd6de5e9523c1f663e8a04d" compoundref="MOM__coms_8F90" startline="597" endline="624">increment_ints_faster</referencedby>
        <referencedby refid="namespacemom__coms_1a24ac5b7cc37b1498f23b61eea03fb8c3" compoundref="MOM__coms_8F90" startline="550" endline="557">ints_to_real</referencedby>
        <referencedby refid="namespacemom__coms_1a0cc261620495abf3313937726883b95e" compoundref="MOM__coms_8F90" startline="508" endline="544">real_to_ints</referencedby>
        <referencedby refid="namespacemom__coms_1ab8feff19e782af36bb7ccccd5ba9eddc" compoundref="MOM__coms_8F90" startline="653" endline="689">regularize_ints</referencedby>
        <referencedby refid="namespacemom__coms_1a81eab26b0e062043ae4b13949d90a5dc" compoundref="MOM__coms_8F90" startline="93" endline="211">reproducing_efp_sum_2d</referencedby>
        <referencedby refid="namespacemom__coms_1a82b35df61c7d0aba1712fc3ce7b47685" compoundref="MOM__coms_8F90" startline="220" endline="316">reproducing_sum_2d</referencedby>
        <referencedby refid="namespacemom__coms_1aa98bb5adb44798d397f668edf62832e8" compoundref="MOM__coms_8F90" startline="325" endline="503">reproducing_sum_3d</referencedby>
      </memberdef>
      <memberdef kind="variable" id="namespacemom__coms_1ad18445cd567da1ccb36b4080c93b4d61" prot="private" static="no" mutable="no">
        <type>real, dimension(<ref refid="namespacemom__coms_1ac1760c24e671a314322e4b1b33e0db39" kindref="member">ni</ref>), parameter</type>
        <definition>real, dimension(ni), parameter mom_coms::pr</definition>
        <argsstring></argsstring>
        <name>pr</name>
        <initializer>= (/ <ref refid="namespacemom__coms_1a885379ffe89eb60f2b0071abb9e8c638" kindref="member">r_prec</ref>**2, <ref refid="namespacemom__coms_1a885379ffe89eb60f2b0071abb9e8c638" kindref="member">r_prec</ref>, 1.0, 1.0/<ref refid="namespacemom__coms_1a885379ffe89eb60f2b0071abb9e8c638" kindref="member">r_prec</ref>, 1.0/<ref refid="namespacemom__coms_1a885379ffe89eb60f2b0071abb9e8c638" kindref="member">r_prec</ref>**2, 1.0/<ref refid="namespacemom__coms_1a885379ffe89eb60f2b0071abb9e8c638" kindref="member">r_prec</ref>**3 /)</initializer>
        <briefdescription>
<para>An array of the real precision of each of the integers. </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="37" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="37" bodyend="38"/>
        <referencedby refid="namespacemom__coms_1aebe91f9c9bd6de5e9523c1f663e8a04d" compoundref="MOM__coms_8F90" startline="597" endline="624">increment_ints_faster</referencedby>
        <referencedby refid="namespacemom__coms_1a24ac5b7cc37b1498f23b61eea03fb8c3" compoundref="MOM__coms_8F90" startline="550" endline="557">ints_to_real</referencedby>
        <referencedby refid="namespacemom__coms_1a0cc261620495abf3313937726883b95e" compoundref="MOM__coms_8F90" startline="508" endline="544">real_to_ints</referencedby>
        <referencedby refid="namespacemom__coms_1a81eab26b0e062043ae4b13949d90a5dc" compoundref="MOM__coms_8F90" startline="93" endline="211">reproducing_efp_sum_2d</referencedby>
        <referencedby refid="namespacemom__coms_1aa98bb5adb44798d397f668edf62832e8" compoundref="MOM__coms_8F90" startline="325" endline="503">reproducing_sum_3d</referencedby>
      </memberdef>
      <memberdef kind="variable" id="namespacemom__coms_1ab2035af144ae0d121f4259db705c4185" prot="private" static="no" mutable="no">
        <type>real, dimension(<ref refid="namespacemom__coms_1ac1760c24e671a314322e4b1b33e0db39" kindref="member">ni</ref>), parameter</type>
        <definition>real, dimension(ni), parameter mom_coms::i_pr</definition>
        <argsstring></argsstring>
        <name>i_pr</name>
        <initializer>= (/ 1.0/<ref refid="namespacemom__coms_1a885379ffe89eb60f2b0071abb9e8c638" kindref="member">r_prec</ref>**2, 1.0/<ref refid="namespacemom__coms_1a885379ffe89eb60f2b0071abb9e8c638" kindref="member">r_prec</ref>, 1.0, <ref refid="namespacemom__coms_1a885379ffe89eb60f2b0071abb9e8c638" kindref="member">r_prec</ref>, <ref refid="namespacemom__coms_1a885379ffe89eb60f2b0071abb9e8c638" kindref="member">r_prec</ref>**2, <ref refid="namespacemom__coms_1a885379ffe89eb60f2b0071abb9e8c638" kindref="member">r_prec</ref>**3 /)</initializer>
        <briefdescription>
<para>An array of the inverse of the real precision of each of the integers. </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="40" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="40" bodyend="41"/>
        <referencedby refid="namespacemom__coms_1aebe91f9c9bd6de5e9523c1f663e8a04d" compoundref="MOM__coms_8F90" startline="597" endline="624">increment_ints_faster</referencedby>
        <referencedby refid="namespacemom__coms_1a0cc261620495abf3313937726883b95e" compoundref="MOM__coms_8F90" startline="508" endline="544">real_to_ints</referencedby>
        <referencedby refid="namespacemom__coms_1a81eab26b0e062043ae4b13949d90a5dc" compoundref="MOM__coms_8F90" startline="93" endline="211">reproducing_efp_sum_2d</referencedby>
      </memberdef>
      <memberdef kind="variable" id="namespacemom__coms_1a863bd692f968d62288323e0badf23933" prot="private" static="no" mutable="no">
        <type>real, parameter</type>
        <definition>real, parameter mom_coms::max_efp_float</definition>
        <argsstring></argsstring>
        <name>max_efp_float</name>
        <initializer>= <ref refid="namespacemom__coms_1ad18445cd567da1ccb36b4080c93b4d61" kindref="member">pr</ref>(1) * (2.**63 - 1.)</initializer>
        <briefdescription>
<para>The largest float with an EFP representation. NOTE: Only the first bin can exceed precision, but is bounded by the largest signed integer. </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="43" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="43" bodyend="43"/>
        <referencedby refid="namespacemom__coms_1aebe91f9c9bd6de5e9523c1f663e8a04d" compoundref="MOM__coms_8F90" startline="597" endline="624">increment_ints_faster</referencedby>
      </memberdef>
      <memberdef kind="variable" id="namespacemom__coms_1a7af397491bbb8f8e6e9a268492bebc33" prot="private" static="no" mutable="no">
        <type>logical</type>
        <definition>logical mom_coms::overflow_error</definition>
        <argsstring></argsstring>
        <name>overflow_error</name>
        <initializer>= .false.</initializer>
        <briefdescription>
<para>This becomes true if an overflow is encountered. </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="48" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="48" bodyend="48"/>
        <referencedby refid="namespacemom__coms_1a3fe107391eb9d2c199eb09e451f4dbb2" compoundref="MOM__coms_8F90" startline="629" endline="647">carry_overflow</referencedby>
        <referencedby refid="namespacemom__coms_1a6cbcab29d87b134dcd5c4bdb922b4344" compoundref="MOM__coms_8F90" startline="789" endline="833">efp_list_sum_across_pes</referencedby>
        <referencedby refid="namespacemom__coms_1aa6ad80e8330fc146562404a4e756916b" compoundref="MOM__coms_8F90" startline="839" endline="880">efp_val_sum_across_pes</referencedby>
        <referencedby refid="namespacemom__coms_1a8228dee8e8e72652d5a58f483f0dc661" compoundref="MOM__coms_8F90" startline="563" endline="591">increment_ints</referencedby>
        <referencedby refid="namespacemom__coms_1aebe91f9c9bd6de5e9523c1f663e8a04d" compoundref="MOM__coms_8F90" startline="597" endline="624">increment_ints_faster</referencedby>
        <referencedby refid="namespacemom__coms_1addf8caf9a58bed7059b5bb6660d73c4e" compoundref="MOM__coms_8F90" startline="694" endline="695">query_efp_overflow_error</referencedby>
        <referencedby refid="namespacemom__coms_1a81eab26b0e062043ae4b13949d90a5dc" compoundref="MOM__coms_8F90" startline="93" endline="211">reproducing_efp_sum_2d</referencedby>
        <referencedby refid="namespacemom__coms_1a82b35df61c7d0aba1712fc3ce7b47685" compoundref="MOM__coms_8F90" startline="220" endline="316">reproducing_sum_2d</referencedby>
        <referencedby refid="namespacemom__coms_1aa98bb5adb44798d397f668edf62832e8" compoundref="MOM__coms_8F90" startline="325" endline="503">reproducing_sum_3d</referencedby>
        <referencedby refid="namespacemom__coms_1a9a44466e43db89b2525996feedd11b7a" compoundref="MOM__coms_8F90" startline="700" endline="700">reset_efp_overflow_error</referencedby>
      </memberdef>
      <memberdef kind="variable" id="namespacemom__coms_1adfb52edef53a82f62d4c9a0786ce6bdf" prot="private" static="no" mutable="no">
        <type>logical</type>
        <definition>logical mom_coms::nan_error</definition>
        <argsstring></argsstring>
        <name>nan_error</name>
        <initializer>= .false.</initializer>
        <briefdescription>
<para>This becomes true if a NaN is encountered. </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="49" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="49" bodyend="49"/>
        <referencedby refid="namespacemom__coms_1aebe91f9c9bd6de5e9523c1f663e8a04d" compoundref="MOM__coms_8F90" startline="597" endline="624">increment_ints_faster</referencedby>
        <referencedby refid="namespacemom__coms_1a0cc261620495abf3313937726883b95e" compoundref="MOM__coms_8F90" startline="508" endline="544">real_to_ints</referencedby>
        <referencedby refid="namespacemom__coms_1a81eab26b0e062043ae4b13949d90a5dc" compoundref="MOM__coms_8F90" startline="93" endline="211">reproducing_efp_sum_2d</referencedby>
        <referencedby refid="namespacemom__coms_1aa98bb5adb44798d397f668edf62832e8" compoundref="MOM__coms_8F90" startline="325" endline="503">reproducing_sum_3d</referencedby>
      </memberdef>
      <memberdef kind="variable" id="namespacemom__coms_1ad6c2231f3de989b71d4455ca97b24d8a" prot="private" static="no" mutable="no">
        <type>logical</type>
        <definition>logical mom_coms::debug</definition>
        <argsstring></argsstring>
        <name>debug</name>
        <initializer>= .false.</initializer>
        <briefdescription>
<para>Making this true enables debugging output. </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="50" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="50" bodyend="50"/>
        <referencedby refid="namespacemom__coms_1a82b35df61c7d0aba1712fc3ce7b47685" compoundref="MOM__coms_8F90" startline="220" endline="316">reproducing_sum_2d</referencedby>
        <referencedby refid="namespacemom__coms_1aa98bb5adb44798d397f668edf62832e8" compoundref="MOM__coms_8F90" startline="325" endline="503">reproducing_sum_3d</referencedby>
      </memberdef>
      </sectiondef>
      <sectiondef kind="func">
      <memberdef kind="function" id="namespacemom__coms_1a81eab26b0e062043ae4b13949d90a5dc" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>type(<ref refid="structmom__coms_1_1efp__type" kindref="compound">efp_type</ref>) function</type>
        <definition>type(efp_type) function mom_coms::reproducing_efp_sum_2d</definition>
        <argsstring>(array, isr, ier, jsr, jer, overflow_check, err, only_on_PE)</argsstring>
        <name>reproducing_efp_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>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, with the result returned as an extended fixed point type that can be converted back to a real number using EFP_to_real. 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="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>The result in extended fixed point format </para>
</simplesect>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="92" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="93" bodyend="211"/>
        <references refid="namespacemom__coms_1a3fe107391eb9d2c199eb09e451f4dbb2" compoundref="MOM__coms_8F90" startline="629" endline="647">carry_overflow</references>
        <references refid="namespacemom__coms_1ab2035af144ae0d121f4259db705c4185" compoundref="MOM__coms_8F90" startline="40" endline="41">i_pr</references>
        <references refid="namespacemom__coms_1a8228dee8e8e72652d5a58f483f0dc661" compoundref="MOM__coms_8F90" startline="563" endline="591">increment_ints</references>
        <references refid="namespacemom__coms_1aebe91f9c9bd6de5e9523c1f663e8a04d" compoundref="MOM__coms_8F90" startline="597" endline="624">increment_ints_faster</references>
        <references refid="namespacemom__coms_1a2aeaf40b69c9d498459bc534a38451d8" compoundref="MOM__coms_8F90" startline="30" endline="30">max_count_prec</references>
        <references refid="namespacemom__error__handler_1a460cfb79a06c29fc249952c2a3710d67" compoundref="MOM__error__handler_8F90" startline="72" endline="92">mom_error_handler::mom_error</references>
        <references refid="namespacemom__coms_1adfb52edef53a82f62d4c9a0786ce6bdf" compoundref="MOM__coms_8F90" startline="49" endline="49">nan_error</references>
        <references refid="namespacemom__coms_1ac1760c24e671a314322e4b1b33e0db39" compoundref="MOM__coms_8F90" startline="35" endline="35">ni</references>
        <references refid="namespacemom__coms_1a7af397491bbb8f8e6e9a268492bebc33" compoundref="MOM__coms_8F90" startline="48" endline="48">overflow_error</references>
        <references refid="namespacemom__coms_1ad18445cd567da1ccb36b4080c93b4d61" compoundref="MOM__coms_8F90" startline="37" endline="38">pr</references>
        <references refid="namespacemom__coms_1a0cc261620495abf3313937726883b95e" compoundref="MOM__coms_8F90" startline="508" endline="544">real_to_ints</references>
        <references refid="namespacemom__coms_1ab8feff19e782af36bb7ccccd5ba9eddc" compoundref="MOM__coms_8F90" startline="653" endline="689">regularize_ints</references>
        <referencedby refid="namespacemom__coms_1a82b35df61c7d0aba1712fc3ce7b47685" compoundref="MOM__coms_8F90" startline="220" endline="316">reproducing_sum_2d</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespacemom__coms_1a82b35df61c7d0aba1712fc3ce7b47685" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>real function</type>
        <definition>real function mom_coms::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"/>
        <references refid="namespacemom__coms_1ad6c2231f3de989b71d4455ca97b24d8a" compoundref="MOM__coms_8F90" startline="50" endline="50">debug</references>
        <references refid="namespacemom__coms_1a24ac5b7cc37b1498f23b61eea03fb8c3" compoundref="MOM__coms_8F90" startline="550" endline="557">ints_to_real</references>
        <references refid="namespacemom__coms_1a2aeaf40b69c9d498459bc534a38451d8" compoundref="MOM__coms_8F90" startline="30" endline="30">max_count_prec</references>
        <references refid="namespacemom__error__handler_1a460cfb79a06c29fc249952c2a3710d67" compoundref="MOM__error__handler_8F90" startline="72" endline="92">mom_error_handler::mom_error</references>
        <references refid="namespacemom__error__handler_1a1c462df7b61f1296407b4af51dfeceab" compoundref="MOM__error__handler_8F90" startline="53" endline="66">mom_error_handler::mom_mesg</references>
        <references refid="namespacemom__coms_1ac1760c24e671a314322e4b1b33e0db39" compoundref="MOM__coms_8F90" startline="35" endline="35">ni</references>
        <references refid="namespacemom__coms_1a7af397491bbb8f8e6e9a268492bebc33" compoundref="MOM__coms_8F90" startline="48" endline="48">overflow_error</references>
        <references refid="namespacemom__coms_1a0cc261620495abf3313937726883b95e" compoundref="MOM__coms_8F90" startline="508" endline="544">real_to_ints</references>
        <references refid="namespacemom__coms_1a81eab26b0e062043ae4b13949d90a5dc" compoundref="MOM__coms_8F90" startline="93" endline="211">reproducing_efp_sum_2d</references>
      </memberdef>
      <memberdef kind="function" id="namespacemom__coms_1aa98bb5adb44798d397f668edf62832e8" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>real function</type>
        <definition>real function mom_coms::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"/>
        <references refid="namespacemom__coms_1a3fe107391eb9d2c199eb09e451f4dbb2" compoundref="MOM__coms_8F90" startline="629" endline="647">carry_overflow</references>
        <references refid="namespacemom__coms_1ad6c2231f3de989b71d4455ca97b24d8a" compoundref="MOM__coms_8F90" startline="50" endline="50">debug</references>
        <references refid="namespacemom__coms_1a8228dee8e8e72652d5a58f483f0dc661" compoundref="MOM__coms_8F90" startline="563" endline="591">increment_ints</references>
        <references refid="namespacemom__coms_1aebe91f9c9bd6de5e9523c1f663e8a04d" compoundref="MOM__coms_8F90" startline="597" endline="624">increment_ints_faster</references>
        <references refid="namespacemom__coms_1a24ac5b7cc37b1498f23b61eea03fb8c3" compoundref="MOM__coms_8F90" startline="550" endline="557">ints_to_real</references>
        <references refid="namespacemom__coms_1a2aeaf40b69c9d498459bc534a38451d8" compoundref="MOM__coms_8F90" startline="30" endline="30">max_count_prec</references>
        <references refid="namespacemom__error__handler_1a460cfb79a06c29fc249952c2a3710d67" compoundref="MOM__error__handler_8F90" startline="72" endline="92">mom_error_handler::mom_error</references>
        <references refid="namespacemom__error__handler_1a1c462df7b61f1296407b4af51dfeceab" compoundref="MOM__error__handler_8F90" startline="53" endline="66">mom_error_handler::mom_mesg</references>
        <references refid="namespacemom__coms_1adfb52edef53a82f62d4c9a0786ce6bdf" compoundref="MOM__coms_8F90" startline="49" endline="49">nan_error</references>
        <references refid="namespacemom__coms_1ac1760c24e671a314322e4b1b33e0db39" compoundref="MOM__coms_8F90" startline="35" endline="35">ni</references>
        <references refid="namespacemom__coms_1a7af397491bbb8f8e6e9a268492bebc33" compoundref="MOM__coms_8F90" startline="48" endline="48">overflow_error</references>
        <references refid="namespacemom__coms_1ad18445cd567da1ccb36b4080c93b4d61" compoundref="MOM__coms_8F90" startline="37" endline="38">pr</references>
        <references refid="namespacemom__coms_1a0cc261620495abf3313937726883b95e" compoundref="MOM__coms_8F90" startline="508" endline="544">real_to_ints</references>
        <references refid="namespacemom__coms_1ab8feff19e782af36bb7ccccd5ba9eddc" compoundref="MOM__coms_8F90" startline="653" endline="689">regularize_ints</references>
      </memberdef>
      <memberdef kind="function" id="namespacemom__coms_1a0cc261620495abf3313937726883b95e" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>integer(kind=8) function, dimension(<ref refid="namespacemom__coms_1ac1760c24e671a314322e4b1b33e0db39" kindref="member">ni</ref>)</type>
        <definition>integer(kind=8) function, dimension(ni) mom_coms::real_to_ints</definition>
        <argsstring>(r, prec_error, overflow)</argsstring>
        <name>real_to_ints</name>
        <param>
          <type>r</type>
          <defname>r</defname>
        </param>
        <param>
          <type>prec_error</type>
          <defname>prec_error</defname>
        </param>
        <param>
          <type>overflow</type>
          <defname>overflow</defname>
        </param>
        <briefdescription>
<para>Convert a real number into the array of integers constitute its extended-fixed-point representation. </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="in">r</parametername>
</parameternamelist>
<parameterdescription>
<para>The real number being converted </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">prec_error</parametername>
</parameternamelist>
<parameterdescription>
<para>The PE-count dependent precision of the integers that is safe from overflows during global sums. This will be larger than the compile-time precision parameter, and is used to detect overflows. </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">overflow</parametername>
</parameternamelist>
<parameterdescription>
<para>Returns true if the conversion is being done on a value that is too large to be represented </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="507" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="508" bodyend="544"/>
        <references refid="namespacemom__coms_1ab2035af144ae0d121f4259db705c4185" compoundref="MOM__coms_8F90" startline="40" endline="41">i_pr</references>
        <references refid="namespacemom__error__handler_1a460cfb79a06c29fc249952c2a3710d67" compoundref="MOM__error__handler_8F90" startline="72" endline="92">mom_error_handler::mom_error</references>
        <references refid="namespacemom__coms_1adfb52edef53a82f62d4c9a0786ce6bdf" compoundref="MOM__coms_8F90" startline="49" endline="49">nan_error</references>
        <references refid="namespacemom__coms_1ac1760c24e671a314322e4b1b33e0db39" compoundref="MOM__coms_8F90" startline="35" endline="35">ni</references>
        <references refid="namespacemom__coms_1ad18445cd567da1ccb36b4080c93b4d61" compoundref="MOM__coms_8F90" startline="37" endline="38">pr</references>
        <references refid="namespacemom__coms_1a53dec744e5fb972fe74863d02a5b3f7f" compoundref="MOM__coms_8F90" startline="27" endline="27">prec</references>
        <referencedby refid="namespacemom__coms_1ac8f1b5be23b128cd8bb956ebda917edb" compoundref="MOM__coms_8F90" startline="765" endline="783">real_to_efp</referencedby>
        <referencedby refid="namespacemom__coms_1a81eab26b0e062043ae4b13949d90a5dc" compoundref="MOM__coms_8F90" startline="93" endline="211">reproducing_efp_sum_2d</referencedby>
        <referencedby refid="namespacemom__coms_1a82b35df61c7d0aba1712fc3ce7b47685" compoundref="MOM__coms_8F90" startline="220" endline="316">reproducing_sum_2d</referencedby>
        <referencedby refid="namespacemom__coms_1aa98bb5adb44798d397f668edf62832e8" compoundref="MOM__coms_8F90" startline="325" endline="503">reproducing_sum_3d</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespacemom__coms_1a24ac5b7cc37b1498f23b61eea03fb8c3" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>real function</type>
        <definition>real function mom_coms::ints_to_real</definition>
        <argsstring>(ints)</argsstring>
        <name>ints_to_real</name>
        <param>
          <type>ints</type>
          <defname>ints</defname>
        </param>
        <briefdescription>
<para>Convert the array of integers that constitute an extended-fixed-point representation into a real number. </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="in">ints</parametername>
</parameternamelist>
<parameterdescription>
<para>The array of EFP integers </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="549" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="550" bodyend="557"/>
        <references refid="namespacemom__coms_1ac1760c24e671a314322e4b1b33e0db39" compoundref="MOM__coms_8F90" startline="35" endline="35">ni</references>
        <references refid="namespacemom__coms_1ad18445cd567da1ccb36b4080c93b4d61" compoundref="MOM__coms_8F90" startline="37" endline="38">pr</references>
        <referencedby refid="namespacemom__coms_1a4aaf51b372bcaf7b46939145577eff92" compoundref="MOM__coms_8F90" startline="741" endline="745">efp_to_real</referencedby>
        <referencedby refid="namespacemom__coms_1a82b35df61c7d0aba1712fc3ce7b47685" compoundref="MOM__coms_8F90" startline="220" endline="316">reproducing_sum_2d</referencedby>
        <referencedby refid="namespacemom__coms_1aa98bb5adb44798d397f668edf62832e8" compoundref="MOM__coms_8F90" startline="325" endline="503">reproducing_sum_3d</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespacemom__coms_1a8228dee8e8e72652d5a58f483f0dc661" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine</type>
        <definition>subroutine mom_coms::increment_ints</definition>
        <argsstring>(int_sum, int2, prec_error)</argsstring>
        <name>increment_ints</name>
        <param>
          <type>int_sum</type>
          <defname>int_sum</defname>
        </param>
        <param>
          <type>int2</type>
          <defname>int2</defname>
        </param>
        <param>
          <type>prec_error</type>
          <defname>prec_error</defname>
        </param>
        <briefdescription>
<para>Increment an array of integers that constitutes an extended-fixed-point representation with a another EFP number. </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="inout">int_sum</parametername>
</parameternamelist>
<parameterdescription>
<para>The array of EFP integers being incremented </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">int2</parametername>
</parameternamelist>
<parameterdescription>
<para>The array of EFP integers being added </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">prec_error</parametername>
</parameternamelist>
<parameterdescription>
<para>The PE-count dependent precision of the integers that is safe from overflows during global sums. This will be larger than the compile-time precision parameter, and is used to detect overflows. </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="562" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="563" bodyend="591"/>
        <references refid="namespacemom__coms_1ac1760c24e671a314322e4b1b33e0db39" compoundref="MOM__coms_8F90" startline="35" endline="35">ni</references>
        <references refid="namespacemom__coms_1a7af397491bbb8f8e6e9a268492bebc33" compoundref="MOM__coms_8F90" startline="48" endline="48">overflow_error</references>
        <references refid="namespacemom__coms_1a53dec744e5fb972fe74863d02a5b3f7f" compoundref="MOM__coms_8F90" startline="27" endline="27">prec</references>
        <referencedby refid="namespacemom__coms_1ac9cda4ec7606fa2e47d79d759d9e6694" compoundref="MOM__coms_8F90" startline="716" endline="724">efp_minus</referencedby>
        <referencedby refid="namespacemom__coms_1abfb8af92b0a6ee8b7f5d8391f6893977" compoundref="MOM__coms_8F90" startline="705" endline="711">efp_plus</referencedby>
        <referencedby refid="namespacemom__coms_1a81eab26b0e062043ae4b13949d90a5dc" compoundref="MOM__coms_8F90" startline="93" endline="211">reproducing_efp_sum_2d</referencedby>
        <referencedby refid="namespacemom__coms_1aa98bb5adb44798d397f668edf62832e8" compoundref="MOM__coms_8F90" startline="325" endline="503">reproducing_sum_3d</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespacemom__coms_1aebe91f9c9bd6de5e9523c1f663e8a04d" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine</type>
        <definition>subroutine mom_coms::increment_ints_faster</definition>
        <argsstring>(int_sum, r, max_mag_term)</argsstring>
        <name>increment_ints_faster</name>
        <param>
          <type>int_sum</type>
          <defname>int_sum</defname>
        </param>
        <param>
          <type>r</type>
          <defname>r</defname>
        </param>
        <param>
          <type>max_mag_term</type>
          <defname>max_mag_term</defname>
        </param>
        <briefdescription>
<para>Increment an EFP number with a real number without doing any carrying of of overflows and using only minimal error checking. </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="inout">int_sum</parametername>
</parameternamelist>
<parameterdescription>
<para>The array of EFP integers being incremented </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">r</parametername>
</parameternamelist>
<parameterdescription>
<para>The real number being added. </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">max_mag_term</parametername>
</parameternamelist>
<parameterdescription>
<para>A running maximum magnitude of the r&apos;s. </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="596" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="597" bodyend="624"/>
        <references refid="namespacemom__coms_1ab2035af144ae0d121f4259db705c4185" compoundref="MOM__coms_8F90" startline="40" endline="41">i_pr</references>
        <references refid="namespacemom__coms_1a863bd692f968d62288323e0badf23933" compoundref="MOM__coms_8F90" startline="43" endline="43">max_efp_float</references>
        <references refid="namespacemom__coms_1adfb52edef53a82f62d4c9a0786ce6bdf" compoundref="MOM__coms_8F90" startline="49" endline="49">nan_error</references>
        <references refid="namespacemom__coms_1ac1760c24e671a314322e4b1b33e0db39" compoundref="MOM__coms_8F90" startline="35" endline="35">ni</references>
        <references refid="namespacemom__coms_1a7af397491bbb8f8e6e9a268492bebc33" compoundref="MOM__coms_8F90" startline="48" endline="48">overflow_error</references>
        <references refid="namespacemom__coms_1ad18445cd567da1ccb36b4080c93b4d61" compoundref="MOM__coms_8F90" startline="37" endline="38">pr</references>
        <referencedby refid="namespacemom__coms_1a81eab26b0e062043ae4b13949d90a5dc" compoundref="MOM__coms_8F90" startline="93" endline="211">reproducing_efp_sum_2d</referencedby>
        <referencedby refid="namespacemom__coms_1aa98bb5adb44798d397f668edf62832e8" compoundref="MOM__coms_8F90" startline="325" endline="503">reproducing_sum_3d</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespacemom__coms_1a3fe107391eb9d2c199eb09e451f4dbb2" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine</type>
        <definition>subroutine mom_coms::carry_overflow</definition>
        <argsstring>(int_sum, prec_error)</argsstring>
        <name>carry_overflow</name>
        <param>
          <type>int_sum</type>
          <defname>int_sum</defname>
        </param>
        <param>
          <type>prec_error</type>
          <defname>prec_error</defname>
        </param>
        <briefdescription>
<para>This subroutine handles carrying of the overflow. </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="inout">int_sum</parametername>
</parameternamelist>
<parameterdescription>
<para>The array of EFP integers being modified by carries, but without changing value. </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">prec_error</parametername>
</parameternamelist>
<parameterdescription>
<para>The PE-count dependent precision of the integers that is safe from overflows during global sums. This will be larger than the compile-time precision parameter, and is used to detect overflows. </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="628" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="629" bodyend="647"/>
        <references refid="namespacemom__coms_1af2d95ca11334965b9f5ecf2593692cd7" compoundref="MOM__coms_8F90" startline="29" endline="29">i_prec</references>
        <references refid="namespacemom__coms_1ac1760c24e671a314322e4b1b33e0db39" compoundref="MOM__coms_8F90" startline="35" endline="35">ni</references>
        <references refid="namespacemom__coms_1a7af397491bbb8f8e6e9a268492bebc33" compoundref="MOM__coms_8F90" startline="48" endline="48">overflow_error</references>
        <references refid="namespacemom__coms_1a53dec744e5fb972fe74863d02a5b3f7f" compoundref="MOM__coms_8F90" startline="27" endline="27">prec</references>
        <referencedby refid="namespacemom__coms_1a6cbcab29d87b134dcd5c4bdb922b4344" compoundref="MOM__coms_8F90" startline="789" endline="833">efp_list_sum_across_pes</referencedby>
        <referencedby refid="namespacemom__coms_1aa6ad80e8330fc146562404a4e756916b" compoundref="MOM__coms_8F90" startline="839" endline="880">efp_val_sum_across_pes</referencedby>
        <referencedby refid="namespacemom__coms_1a81eab26b0e062043ae4b13949d90a5dc" compoundref="MOM__coms_8F90" startline="93" endline="211">reproducing_efp_sum_2d</referencedby>
        <referencedby refid="namespacemom__coms_1aa98bb5adb44798d397f668edf62832e8" compoundref="MOM__coms_8F90" startline="325" endline="503">reproducing_sum_3d</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespacemom__coms_1ab8feff19e782af36bb7ccccd5ba9eddc" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine</type>
        <definition>subroutine mom_coms::regularize_ints</definition>
        <argsstring>(int_sum)</argsstring>
        <name>regularize_ints</name>
        <param>
          <type>int_sum</type>
          <defname>int_sum</defname>
        </param>
        <briefdescription>
<para>This subroutine carries the overflow, and then makes sure that all integers are of the same sign as the overall value. </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="inout">int_sum</parametername>
</parameternamelist>
<parameterdescription>
<para>The array of integers being modified to take a </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="652" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="653" bodyend="689"/>
        <references refid="namespacemom__coms_1af2d95ca11334965b9f5ecf2593692cd7" compoundref="MOM__coms_8F90" startline="29" endline="29">i_prec</references>
        <references refid="namespacemom__coms_1ac1760c24e671a314322e4b1b33e0db39" compoundref="MOM__coms_8F90" startline="35" endline="35">ni</references>
        <references refid="namespacemom__coms_1a53dec744e5fb972fe74863d02a5b3f7f" compoundref="MOM__coms_8F90" startline="27" endline="27">prec</references>
        <referencedby refid="namespacemom__coms_1a4aaf51b372bcaf7b46939145577eff92" compoundref="MOM__coms_8F90" startline="741" endline="745">efp_to_real</referencedby>
        <referencedby refid="namespacemom__coms_1a81eab26b0e062043ae4b13949d90a5dc" compoundref="MOM__coms_8F90" startline="93" endline="211">reproducing_efp_sum_2d</referencedby>
        <referencedby refid="namespacemom__coms_1aa98bb5adb44798d397f668edf62832e8" compoundref="MOM__coms_8F90" startline="325" endline="503">reproducing_sum_3d</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespacemom__coms_1addf8caf9a58bed7059b5bb6660d73c4e" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>logical function, public</type>
        <definition>logical function, public mom_coms::query_efp_overflow_error</definition>
        <argsstring>()</argsstring>
        <name>query_efp_overflow_error</name>
        <briefdescription>
<para>Returns the status of the module&apos;s error flag. </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="693" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="694" bodyend="695"/>
        <references refid="namespacemom__coms_1a7af397491bbb8f8e6e9a268492bebc33" compoundref="MOM__coms_8F90" startline="48" endline="48">overflow_error</references>
        <referencedby refid="namespacemom__spatial__means_1a257babe85df2c4435f119236b94eafe9" compoundref="MOM__spatial__means_8F90" startline="197" endline="277">mom_spatial_means::global_i_mean</referencedby>
        <referencedby refid="namespacemom__spatial__means_1a3c955830f3b9d150d657cb4c18c4b2d9" compoundref="MOM__spatial__means_8F90" startline="283" endline="363">mom_spatial_means::global_j_mean</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespacemom__coms_1a9a44466e43db89b2525996feedd11b7a" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine, public</type>
        <definition>subroutine, public mom_coms::reset_efp_overflow_error</definition>
        <argsstring>()</argsstring>
        <name>reset_efp_overflow_error</name>
        <briefdescription>
<para>Reset the module&apos;s error flag to false. </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="699" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="700" bodyend="700"/>
        <references refid="namespacemom__coms_1a7af397491bbb8f8e6e9a268492bebc33" compoundref="MOM__coms_8F90" startline="48" endline="48">overflow_error</references>
        <referencedby refid="namespacemom__spatial__means_1a257babe85df2c4435f119236b94eafe9" compoundref="MOM__spatial__means_8F90" startline="197" endline="277">mom_spatial_means::global_i_mean</referencedby>
        <referencedby refid="namespacemom__spatial__means_1a3c955830f3b9d150d657cb4c18c4b2d9" compoundref="MOM__spatial__means_8F90" startline="283" endline="363">mom_spatial_means::global_j_mean</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespacemom__coms_1abfb8af92b0a6ee8b7f5d8391f6893977" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>type(<ref refid="structmom__coms_1_1efp__type" kindref="compound">efp_type</ref>) function, public</type>
        <definition>type(efp_type) function, public mom_coms::efp_plus</definition>
        <argsstring>(EFP1, EFP2)</argsstring>
        <name>efp_plus</name>
        <param>
          <type>EFP1</type>
          <defname>EFP1</defname>
        </param>
        <param>
          <type>EFP2</type>
          <defname>EFP2</defname>
        </param>
        <briefdescription>
<para>Add two extended-fixed-point numbers. </para>
        </briefdescription>
        <detaileddescription>
<para><simplesect kind="return"><para>The result in extended fixed point format </para>
</simplesect>
<parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="in">efp1</parametername>
</parameternamelist>
<parameterdescription>
<para>The first extended fixed point number </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">efp2</parametername>
</parameternamelist>
<parameterdescription>
<para>The second extended fixed point number </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="704" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="705" bodyend="711"/>
        <references refid="namespacemom__coms_1a8228dee8e8e72652d5a58f483f0dc661" compoundref="MOM__coms_8F90" startline="563" endline="591">increment_ints</references>
      </memberdef>
      <memberdef kind="function" id="namespacemom__coms_1ac9cda4ec7606fa2e47d79d759d9e6694" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>type(<ref refid="structmom__coms_1_1efp__type" kindref="compound">efp_type</ref>) function, public</type>
        <definition>type(efp_type) function, public mom_coms::efp_minus</definition>
        <argsstring>(EFP1, EFP2)</argsstring>
        <name>efp_minus</name>
        <param>
          <type>EFP1</type>
          <defname>EFP1</defname>
        </param>
        <param>
          <type>EFP2</type>
          <defname>EFP2</defname>
        </param>
        <briefdescription>
<para>Subract one extended-fixed-point number from another. </para>
        </briefdescription>
        <detaileddescription>
<para><simplesect kind="return"><para>The result in extended fixed point format </para>
</simplesect>
<parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="in">efp1</parametername>
</parameternamelist>
<parameterdescription>
<para>The first extended fixed point number </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">efp2</parametername>
</parameternamelist>
<parameterdescription>
<para>The extended fixed point number being subtracted from the first extended fixed point number </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="715" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="716" bodyend="724"/>
        <references refid="namespacemom__coms_1a8228dee8e8e72652d5a58f483f0dc661" compoundref="MOM__coms_8F90" startline="563" endline="591">increment_ints</references>
        <references refid="namespacemom__coms_1ac1760c24e671a314322e4b1b33e0db39" compoundref="MOM__coms_8F90" startline="35" endline="35">ni</references>
      </memberdef>
      <memberdef kind="function" id="namespacemom__coms_1a63ee6c200b7e9e34624430be6347fbec" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine</type>
        <definition>subroutine mom_coms::efp_assign</definition>
        <argsstring>(EFP1, EFP2)</argsstring>
        <name>efp_assign</name>
        <param>
          <type>EFP1</type>
          <defname>EFP1</defname>
        </param>
        <param>
          <type>EFP2</type>
          <defname>EFP2</defname>
        </param>
        <briefdescription>
<para>Copy one extended-fixed-point number into another. </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="out">efp1</parametername>
</parameternamelist>
<parameterdescription>
<para>The recipient extended fixed point number </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">efp2</parametername>
</parameternamelist>
<parameterdescription>
<para>The source extended fixed point number </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="728" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="729" bodyend="736"/>
        <references refid="namespacemom__coms_1ac1760c24e671a314322e4b1b33e0db39" compoundref="MOM__coms_8F90" startline="35" endline="35">ni</references>
      </memberdef>
      <memberdef kind="function" id="namespacemom__coms_1a4aaf51b372bcaf7b46939145577eff92" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>real function, public</type>
        <definition>real function, public mom_coms::efp_to_real</definition>
        <argsstring>(EFP1)</argsstring>
        <name>efp_to_real</name>
        <param>
          <type>EFP1</type>
          <defname>EFP1</defname>
        </param>
        <briefdescription>
<para>Return the real number that an extended-fixed-point number corresponds with. </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="inout">efp1</parametername>
</parameternamelist>
<parameterdescription>
<para>The extended fixed point number being converted </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="740" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="741" bodyend="745"/>
        <references refid="namespacemom__coms_1a24ac5b7cc37b1498f23b61eea03fb8c3" compoundref="MOM__coms_8F90" startline="550" endline="557">ints_to_real</references>
        <references refid="namespacemom__coms_1ab8feff19e782af36bb7ccccd5ba9eddc" compoundref="MOM__coms_8F90" startline="653" endline="689">regularize_ints</references>
        <referencedby refid="namespacemom__coms_1a6cbcab29d87b134dcd5c4bdb922b4344" compoundref="MOM__coms_8F90" startline="789" endline="833">efp_list_sum_across_pes</referencedby>
        <referencedby refid="namespacemom__coms_1a8f23ba3eaaf03101afa61c339fac805b" compoundref="MOM__coms_8F90" startline="751" endline="760">efp_real_diff</referencedby>
        <referencedby refid="namespacemom__coms_1aa6ad80e8330fc146562404a4e756916b" compoundref="MOM__coms_8F90" startline="839" endline="880">efp_val_sum_across_pes</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespacemom__coms_1a8f23ba3eaaf03101afa61c339fac805b" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>real function, public</type>
        <definition>real function, public mom_coms::efp_real_diff</definition>
        <argsstring>(EFP1, EFP2)</argsstring>
        <name>efp_real_diff</name>
        <param>
          <type>EFP1</type>
          <defname>EFP1</defname>
        </param>
        <param>
          <type>EFP2</type>
          <defname>EFP2</defname>
        </param>
        <briefdescription>
<para>Take the difference between two extended-fixed-point numbers (EFP1 - EFP2) and return the result as a real number. </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="in">efp1</parametername>
</parameternamelist>
<parameterdescription>
<para>The first extended fixed point number </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">efp2</parametername>
</parameternamelist>
<parameterdescription>
<para>The extended fixed point number being subtracted from the first extended fixed point number </para>
</parameterdescription>
</parameteritem>
</parameterlist>
<simplesect kind="return"><para>The real result </para>
</simplesect>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="750" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="751" bodyend="760"/>
        <references refid="namespacemom__coms_1a4aaf51b372bcaf7b46939145577eff92" compoundref="MOM__coms_8F90" startline="741" endline="745">efp_to_real</references>
      </memberdef>
      <memberdef kind="function" id="namespacemom__coms_1ac8f1b5be23b128cd8bb956ebda917edb" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>type(<ref refid="structmom__coms_1_1efp__type" kindref="compound">efp_type</ref>) function, public</type>
        <definition>type(efp_type) function, public mom_coms::real_to_efp</definition>
        <argsstring>(val, overflow)</argsstring>
        <name>real_to_efp</name>
        <param>
          <type>val</type>
          <defname>val</defname>
        </param>
        <param>
          <type>overflow</type>
          <defname>overflow</defname>
        </param>
        <briefdescription>
<para>Return the extended-fixed-point number that a real number corresponds with. </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="in">val</parametername>
</parameternamelist>
<parameterdescription>
<para>The real number being converted </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">overflow</parametername>
</parameternamelist>
<parameterdescription>
<para>Returns true if the conversion is being done on a value that is too large to be represented </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="764" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="765" bodyend="783"/>
        <references refid="namespacemom__error__handler_1a460cfb79a06c29fc249952c2a3710d67" compoundref="MOM__error__handler_8F90" startline="72" endline="92">mom_error_handler::mom_error</references>
        <references refid="namespacemom__coms_1a0cc261620495abf3313937726883b95e" compoundref="MOM__coms_8F90" startline="508" endline="544">real_to_ints</references>
        <referencedby refid="namespacemom__energetic__pbl_1ad9fa0dc4ba4e126ec686b44a5829c2e8" compoundref="MOM__energetic__PBL_8F90" startline="1973" endline="2417">mom_energetic_pbl::energetic_pbl_init</referencedby>
        <referencedby refid="namespacemom__energetic__pbl_1a01291f3e97cfdcf58866a1e9b0bcfc26" compoundref="MOM__energetic__PBL_8F90" startline="547" endline="1470">mom_energetic_pbl::epbl_column</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespacemom__coms_1a6cbcab29d87b134dcd5c4bdb922b4344" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine, public</type>
        <definition>subroutine, public mom_coms::efp_list_sum_across_pes</definition>
        <argsstring>(EFPs, nval, errors)</argsstring>
        <name>efp_list_sum_across_pes</name>
        <param>
          <type>EFPs</type>
          <defname>EFPs</defname>
        </param>
        <param>
          <type>nval</type>
          <defname>nval</defname>
        </param>
        <param>
          <type>errors</type>
          <defname>errors</defname>
        </param>
        <briefdescription>
<para>This subroutine does a sum across PEs of a list of EFP variables, returning the sums in place, with all overflows carried. </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="inout">efps</parametername>
</parameternamelist>
<parameterdescription>
<para>The list of extended fixed point numbers </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">nval</parametername>
</parameternamelist>
<parameterdescription>
<para>The number of values being summed. </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="out">errors</parametername>
</parameternamelist>
<parameterdescription>
<para>A list of error flags for each sum </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="788" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="789" bodyend="833"/>
        <references refid="namespacemom__coms_1a3fe107391eb9d2c199eb09e451f4dbb2" compoundref="MOM__coms_8F90" startline="629" endline="647">carry_overflow</references>
        <references refid="namespacemom__coms_1a4aaf51b372bcaf7b46939145577eff92" compoundref="MOM__coms_8F90" startline="741" endline="745">efp_to_real</references>
        <references refid="namespacemom__coms_1a2aeaf40b69c9d498459bc534a38451d8" compoundref="MOM__coms_8F90" startline="30" endline="30">max_count_prec</references>
        <references refid="namespacemom__error__handler_1a460cfb79a06c29fc249952c2a3710d67" compoundref="MOM__error__handler_8F90" startline="72" endline="92">mom_error_handler::mom_error</references>
        <references refid="namespacemom__coms_1ac1760c24e671a314322e4b1b33e0db39" compoundref="MOM__coms_8F90" startline="35" endline="35">ni</references>
        <references refid="namespacemom__coms_1a7af397491bbb8f8e6e9a268492bebc33" compoundref="MOM__coms_8F90" startline="48" endline="48">overflow_error</references>
      </memberdef>
      <memberdef kind="function" id="namespacemom__coms_1aa6ad80e8330fc146562404a4e756916b" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine</type>
        <definition>subroutine mom_coms::efp_val_sum_across_pes</definition>
        <argsstring>(EFP, error)</argsstring>
        <name>efp_val_sum_across_pes</name>
        <param>
          <type>EFP</type>
          <defname>EFP</defname>
        </param>
        <param>
          <type>error</type>
          <defname>error</defname>
        </param>
        <briefdescription>
<para>This subroutine does a sum across PEs of an EFP variable, returning the sums in place, with all overflows carried. </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="inout">efp</parametername>
</parameternamelist>
<parameterdescription>
<para>The extended fixed point numbers being summed across PEs. </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="out">error</parametername>
</parameternamelist>
<parameterdescription>
<para>An error flag for this sum </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="838" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="839" bodyend="880"/>
        <references refid="namespacemom__coms_1a3fe107391eb9d2c199eb09e451f4dbb2" compoundref="MOM__coms_8F90" startline="629" endline="647">carry_overflow</references>
        <references refid="namespacemom__coms_1a4aaf51b372bcaf7b46939145577eff92" compoundref="MOM__coms_8F90" startline="741" endline="745">efp_to_real</references>
        <references refid="namespacemom__coms_1a2aeaf40b69c9d498459bc534a38451d8" compoundref="MOM__coms_8F90" startline="30" endline="30">max_count_prec</references>
        <references refid="namespacemom__error__handler_1a460cfb79a06c29fc249952c2a3710d67" compoundref="MOM__error__handler_8F90" startline="72" endline="92">mom_error_handler::mom_error</references>
        <references refid="namespacemom__coms_1ac1760c24e671a314322e4b1b33e0db39" compoundref="MOM__coms_8F90" startline="35" endline="35">ni</references>
        <references refid="namespacemom__coms_1a7af397491bbb8f8e6e9a268492bebc33" compoundref="MOM__coms_8F90" startline="48" endline="48">overflow_error</references>
      </memberdef>
      <memberdef kind="function" id="namespacemom__coms_1a6a5fa5714820df840a829d6d1b432a75" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine, public</type>
        <definition>subroutine, public mom_coms::mom_infra_end</definition>
        <argsstring></argsstring>
        <name>mom_infra_end</name>
        <briefdescription>
<para>This subroutine carries out all of the calls required to close out the infrastructure cleanly. This should only be called in ocean-only runs, as the coupler takes care of this in coupled runs. </para>
        </briefdescription>
        <detaileddescription>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="886" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" bodystart="887" bodyend="888"/>
      </memberdef>
      </sectiondef>
    <briefdescription>
<para>Interfaces to non-domain-oriented communication subroutines, including the MOM6 reproducing sums facility. </para>
    </briefdescription>
    <detaileddescription>
    </detaileddescription>
    <location file="/home/cermak/src/MOM6.devrob/src/framework/MOM_coms.F90" line="3" column="1"/>
  </compounddef>
</doxygen>
