<?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.20" xml:lang="en-US">
  <compounddef id="namespacemom__thickness__diffuse" kind="namespace" language="Fortran">
    <compoundname>mom_thickness_diffuse</compoundname>
    <innerclass refid="structmom__thickness__diffuse_1_1thickness__diffuse__cs" prot="public">mom_thickness_diffuse::thickness_diffuse_cs</innerclass>
      <sectiondef kind="func">
      <memberdef kind="function" id="namespacemom__thickness__diffuse_1a8a538b778a567f489bfd9c5eadeeebef" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine, public</type>
        <definition>subroutine, public mom_thickness_diffuse::thickness_diffuse</definition>
        <argsstring>(h, uhtr, vhtr, tv, dt, G, GV, US, MEKE, VarMix, CDp, CS)</argsstring>
        <name>thickness_diffuse</name>
        <param>
          <type>h</type>
          <defname>h</defname>
        </param>
        <param>
          <type>uhtr</type>
          <defname>uhtr</defname>
        </param>
        <param>
          <type>vhtr</type>
          <defname>vhtr</defname>
        </param>
        <param>
          <type>tv</type>
          <defname>tv</defname>
        </param>
        <param>
          <type>dt</type>
          <defname>dt</defname>
        </param>
        <param>
          <type>G</type>
          <defname>G</defname>
        </param>
        <param>
          <type>GV</type>
          <defname>GV</defname>
        </param>
        <param>
          <type>US</type>
          <defname>US</defname>
        </param>
        <param>
          <type>MEKE</type>
          <defname>MEKE</defname>
        </param>
        <param>
          <type>VarMix</type>
          <defname>VarMix</defname>
        </param>
        <param>
          <type>CDp</type>
          <defname>CDp</defname>
        </param>
        <param>
          <type>CS</type>
          <defname>CS</defname>
        </param>
        <briefdescription>
<para>Calculates thickness diffusion coefficients and applies thickness diffusion to layer thicknesses, h. Diffusivities are limited to ensure stability. Also returns along-layer mass fluxes used in the continuity equation. </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="in">g</parametername>
</parameternamelist>
<parameterdescription>
<para>Ocean grid structure </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">gv</parametername>
</parameternamelist>
<parameterdescription>
<para>Vertical grid structure </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">us</parametername>
</parameternamelist>
<parameterdescription>
<para>A dimensional unit scaling type </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">h</parametername>
</parameternamelist>
<parameterdescription>
<para>Layer thickness [H ~&gt; m or kg m-2] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">uhtr</parametername>
</parameternamelist>
<parameterdescription>
<para>Accumulated zonal mass flux [L2 H ~&gt; m3 or kg] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">vhtr</parametername>
</parameternamelist>
<parameterdescription>
<para>Accumulated meridional mass flux [L2 H ~&gt; m3 or kg] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">tv</parametername>
</parameternamelist>
<parameterdescription>
<para>Thermodynamics structure </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">dt</parametername>
</parameternamelist>
<parameterdescription>
<para>Time increment [T ~&gt; s] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>meke</parametername>
</parameternamelist>
<parameterdescription>
<para>MEKE control structure </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>varmix</parametername>
</parameternamelist>
<parameterdescription>
<para>Variable mixing coefficients </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">cdp</parametername>
</parameternamelist>
<parameterdescription>
<para>Diagnostics for the continuity equation </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>cs</parametername>
</parameternamelist>
<parameterdescription>
<para>Control structure for thickness diffusion </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/parameterizations/lateral/MOM_thickness_diffuse.F90" line="108" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/parameterizations/lateral/MOM_thickness_diffuse.F90" bodystart="109" bodyend="547"/>
        <references refid="namespacemom__thickness__diffuse_1ab6206370a3f642ad57c63b6e268ee0fb" compoundref="MOM__thickness__diffuse_8F90" startline="1468" endline="1877">add_detangling_kh</references>
        <references refid="namespacemom__diag__mediator_1aa78e69709084d0097b3e01bbd83d3509" compoundref="MOM__diag__mediator_8F90" startline="3266" endline="3339">mom_diag_mediator::diag_update_remap_grids</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__thickness__diffuse_1ae9909642254fcf0160afe46997e10c30" compoundref="MOM__thickness__diffuse_8F90" startline="555" endline="1429">thickness_diffuse_full</references>
        <referencedby refid="namespacemom_1a42ee7e91ffcf1340679e29ab28d9b41d" compoundref="MOM_8F90" startline="946" endline="1125">mom::step_mom_dynamics</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespacemom__thickness__diffuse_1ae9909642254fcf0160afe46997e10c30" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine</type>
        <definition>subroutine mom_thickness_diffuse::thickness_diffuse_full</definition>
        <argsstring>(h, e, Kh_u, Kh_v, tv, uhD, vhD, cg1, dt, G, GV, US, MEKE, CS, int_slope_u, int_slope_v, slope_x, slope_y)</argsstring>
        <name>thickness_diffuse_full</name>
        <param>
          <type>h</type>
          <defname>h</defname>
        </param>
        <param>
          <type>e</type>
          <defname>e</defname>
        </param>
        <param>
          <type>Kh_u</type>
          <defname>Kh_u</defname>
        </param>
        <param>
          <type>Kh_v</type>
          <defname>Kh_v</defname>
        </param>
        <param>
          <type>tv</type>
          <defname>tv</defname>
        </param>
        <param>
          <type>uhD</type>
          <defname>uhD</defname>
        </param>
        <param>
          <type>vhD</type>
          <defname>vhD</defname>
        </param>
        <param>
          <type>cg1</type>
          <defname>cg1</defname>
        </param>
        <param>
          <type>dt</type>
          <defname>dt</defname>
        </param>
        <param>
          <type>G</type>
          <defname>G</defname>
        </param>
        <param>
          <type>GV</type>
          <defname>GV</defname>
        </param>
        <param>
          <type>US</type>
          <defname>US</defname>
        </param>
        <param>
          <type>MEKE</type>
          <defname>MEKE</defname>
        </param>
        <param>
          <type>CS</type>
          <defname>CS</defname>
        </param>
        <param>
          <type>int_slope_u</type>
          <defname>int_slope_u</defname>
        </param>
        <param>
          <type>int_slope_v</type>
          <defname>int_slope_v</defname>
        </param>
        <param>
          <type>slope_x</type>
          <defname>slope_x</defname>
        </param>
        <param>
          <type>slope_y</type>
          <defname>slope_y</defname>
        </param>
        <briefdescription>
<para>Calculates parameterized layer transports for use in the continuity equation. Fluxes are limited to give positive definite thicknesses. Called by <ref refid="namespacemom__thickness__diffuse_1a8a538b778a567f489bfd9c5eadeeebef" kindref="member">thickness_diffuse()</ref>. </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="in">g</parametername>
</parameternamelist>
<parameterdescription>
<para>Ocean grid structure </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">gv</parametername>
</parameternamelist>
<parameterdescription>
<para>Vertical grid structure </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">us</parametername>
</parameternamelist>
<parameterdescription>
<para>A dimensional unit scaling type </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">h</parametername>
</parameternamelist>
<parameterdescription>
<para>Layer thickness [H ~&gt; m or kg m-2] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">e</parametername>
</parameternamelist>
<parameterdescription>
<para>Interface positions [Z ~&gt; m] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">kh_u</parametername>
</parameternamelist>
<parameterdescription>
<para>Thickness diffusivity on interfaces at u points [L2 T-1 ~&gt; m2 s-1] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">kh_v</parametername>
</parameternamelist>
<parameterdescription>
<para>Thickness diffusivity on interfaces at v points [L2 T-1 ~&gt; m2 s-1] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">tv</parametername>
</parameternamelist>
<parameterdescription>
<para>Thermodynamics structure </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="out">uhd</parametername>
</parameternamelist>
<parameterdescription>
<para>Zonal mass fluxes [H L2 T-1 ~&gt; m3 s-1 or kg s-1] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="out">vhd</parametername>
</parameternamelist>
<parameterdescription>
<para>Meridional mass fluxes [H L2 T-1 ~&gt; m3 s-1 or kg s-1] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>cg1</parametername>
</parameternamelist>
<parameterdescription>
<para>Wave speed [L T-1 ~&gt; m s-1] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">dt</parametername>
</parameternamelist>
<parameterdescription>
<para>Time increment [T ~&gt; s] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>meke</parametername>
</parameternamelist>
<parameterdescription>
<para>MEKE control structure </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>cs</parametername>
</parameternamelist>
<parameterdescription>
<para>Control structure for thickness diffusion </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">int_slope_u</parametername>
</parameternamelist>
<parameterdescription>
<para>Ratio that determine how much of the isopycnal slopes are taken directly from the interface slopes without consideration of density gradients [nondim]. </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">int_slope_v</parametername>
</parameternamelist>
<parameterdescription>
<para>Ratio that determine how much of the isopycnal slopes are taken directly from the interface slopes without consideration of density gradients [nondim]. </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">slope_x</parametername>
</parameternamelist>
<parameterdescription>
<para>Isopycnal slope at u-points </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">slope_y</parametername>
</parameternamelist>
<parameterdescription>
<para>Isopycnal slope at v-points </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/parameterizations/lateral/MOM_thickness_diffuse.F90" line="553" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/parameterizations/lateral/MOM_thickness_diffuse.F90" bodystart="555" bodyend="1429"/>
        <references refid="namespacemom__error__handler_1a460cfb79a06c29fc249952c2a3710d67" compoundref="MOM__error__handler_8F90" startline="72" endline="92">mom_error_handler::mom_error</references>
        <references refid="namespacemom__thickness__diffuse_1a52d5fe57d53414fdc05f669723c9774e" compoundref="MOM__thickness__diffuse_8F90" startline="1434" endline="1462">streamfn_solver</references>
        <references refid="namespacemom__isopycnal__slopes_1a34691482caaff356da3c5182657dba0d" compoundref="MOM__isopycnal__slopes_8F90" startline="391" endline="470">mom_isopycnal_slopes::vert_fill_ts</references>
        <referencedby refid="namespacemom__thickness__diffuse_1a8a538b778a567f489bfd9c5eadeeebef" compoundref="MOM__thickness__diffuse_8F90" startline="109" endline="547">thickness_diffuse</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespacemom__thickness__diffuse_1a52d5fe57d53414fdc05f669723c9774e" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine</type>
        <definition>subroutine mom_thickness_diffuse::streamfn_solver</definition>
        <argsstring>(nk, c2_h, hN2, sfn)</argsstring>
        <name>streamfn_solver</name>
        <param>
          <type>nk</type>
          <defname>nk</defname>
        </param>
        <param>
          <type>c2_h</type>
          <defname>c2_h</defname>
        </param>
        <param>
          <type>hN2</type>
          <defname>hN2</defname>
        </param>
        <param>
          <type>sfn</type>
          <defname>sfn</defname>
        </param>
        <briefdescription>
<para>Tridiagonal solver for streamfunction at interfaces. </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="in">nk</parametername>
</parameternamelist>
<parameterdescription>
<para>Number of layers </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">c2_h</parametername>
</parameternamelist>
<parameterdescription>
<para>Wave speed squared over thickness in layers [L2 Z-1 T-2 ~&gt; m s-2] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">hn2</parametername>
</parameternamelist>
<parameterdescription>
<para>Thickness times N2 at interfaces [L2 Z-1 T-2 ~&gt; m s-2] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">sfn</parametername>
</parameternamelist>
<parameterdescription>
<para>Streamfunction [Z L2 T-1 ~&gt; m3 s-1] or arbitrary units On entry, equals diffusivity times slope. On exit, equals the streamfunction. </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/parameterizations/lateral/MOM_thickness_diffuse.F90" line="1433" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/parameterizations/lateral/MOM_thickness_diffuse.F90" bodystart="1434" bodyend="1462"/>
        <referencedby refid="namespacemom__thickness__diffuse_1ae9909642254fcf0160afe46997e10c30" compoundref="MOM__thickness__diffuse_8F90" startline="555" endline="1429">thickness_diffuse_full</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespacemom__thickness__diffuse_1ab6206370a3f642ad57c63b6e268ee0fb" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine</type>
        <definition>subroutine mom_thickness_diffuse::add_detangling_kh</definition>
        <argsstring>(h, e, Kh_u, Kh_v, KH_u_CFL, KH_v_CFL, tv, dt, G, GV, US, CS, int_slope_u, int_slope_v)</argsstring>
        <name>add_detangling_kh</name>
        <param>
          <type>h</type>
          <defname>h</defname>
        </param>
        <param>
          <type>e</type>
          <defname>e</defname>
        </param>
        <param>
          <type>Kh_u</type>
          <defname>Kh_u</defname>
        </param>
        <param>
          <type>Kh_v</type>
          <defname>Kh_v</defname>
        </param>
        <param>
          <type>KH_u_CFL</type>
          <defname>KH_u_CFL</defname>
        </param>
        <param>
          <type>KH_v_CFL</type>
          <defname>KH_v_CFL</defname>
        </param>
        <param>
          <type>tv</type>
          <defname>tv</defname>
        </param>
        <param>
          <type>dt</type>
          <defname>dt</defname>
        </param>
        <param>
          <type>G</type>
          <defname>G</defname>
        </param>
        <param>
          <type>GV</type>
          <defname>GV</defname>
        </param>
        <param>
          <type>US</type>
          <defname>US</defname>
        </param>
        <param>
          <type>CS</type>
          <defname>CS</defname>
        </param>
        <param>
          <type>int_slope_u</type>
          <defname>int_slope_u</defname>
        </param>
        <param>
          <type>int_slope_v</type>
          <defname>int_slope_v</defname>
        </param>
        <briefdescription>
<para>Modifies thickness diffusivities to untangle layer structures. </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="in">g</parametername>
</parameternamelist>
<parameterdescription>
<para>Ocean grid structure </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">gv</parametername>
</parameternamelist>
<parameterdescription>
<para>Vertical grid structure </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">us</parametername>
</parameternamelist>
<parameterdescription>
<para>A dimensional unit scaling type </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">h</parametername>
</parameternamelist>
<parameterdescription>
<para>Layer thickness [H ~&gt; m or kg m-2] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">e</parametername>
</parameternamelist>
<parameterdescription>
<para>Interface positions [Z ~&gt; m] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">kh_u</parametername>
</parameternamelist>
<parameterdescription>
<para>Thickness diffusivity on interfaces at u points [L2 T-1 ~&gt; m2 s-1] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">kh_v</parametername>
</parameternamelist>
<parameterdescription>
<para>Thickness diffusivity on interfaces at v points [L2 T-1 ~&gt; m2 s-1] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">kh_u_cfl</parametername>
</parameternamelist>
<parameterdescription>
<para>Maximum stable thickness diffusivity at u points [L2 T-1 ~&gt; m2 s-1] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">kh_v_cfl</parametername>
</parameternamelist>
<parameterdescription>
<para>Maximum stable thickness diffusivity at v points [L2 T-1 ~&gt; m2 s-1] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">tv</parametername>
</parameternamelist>
<parameterdescription>
<para>Thermodynamics structure </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">dt</parametername>
</parameternamelist>
<parameterdescription>
<para>Time increment [T ~&gt; s] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>cs</parametername>
</parameternamelist>
<parameterdescription>
<para>Control structure for thickness diffusion </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">int_slope_u</parametername>
</parameternamelist>
<parameterdescription>
<para>Ratio that determine how much of the isopycnal slopes are taken directly from the interface slopes without consideration of density gradients. </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">int_slope_v</parametername>
</parameternamelist>
<parameterdescription>
<para>Ratio that determine how much of the isopycnal slopes are taken directly from the interface slopes without consideration of density gradients. </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/parameterizations/lateral/MOM_thickness_diffuse.F90" line="1466" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/parameterizations/lateral/MOM_thickness_diffuse.F90" bodystart="1468" bodyend="1877"/>
        <referencedby refid="namespacemom__thickness__diffuse_1a8a538b778a567f489bfd9c5eadeeebef" compoundref="MOM__thickness__diffuse_8F90" startline="109" endline="547">thickness_diffuse</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespacemom__thickness__diffuse_1affd209ab72d54799680c78d8ba1ad779" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine, public</type>
        <definition>subroutine, public mom_thickness_diffuse::thickness_diffuse_init</definition>
        <argsstring>(Time, G, GV, US, param_file, diag, CDp, CS)</argsstring>
        <name>thickness_diffuse_init</name>
        <param>
          <type>Time</type>
          <defname>Time</defname>
        </param>
        <param>
          <type>G</type>
          <defname>G</defname>
        </param>
        <param>
          <type>GV</type>
          <defname>GV</defname>
        </param>
        <param>
          <type>US</type>
          <defname>US</defname>
        </param>
        <param>
          <type>param_file</type>
          <defname>param_file</defname>
        </param>
        <param>
          <type>diag</type>
          <defname>diag</defname>
        </param>
        <param>
          <type>CDp</type>
          <defname>CDp</defname>
        </param>
        <param>
          <type>CS</type>
          <defname>CS</defname>
        </param>
        <briefdescription>
<para>Initialize the thickness diffusion module/structure. </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="in">time</parametername>
</parameternamelist>
<parameterdescription>
<para>Current model time </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">g</parametername>
</parameternamelist>
<parameterdescription>
<para>Ocean grid structure </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">gv</parametername>
</parameternamelist>
<parameterdescription>
<para>Vertical grid structure </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">us</parametername>
</parameternamelist>
<parameterdescription>
<para>A dimensional unit scaling type </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">param_file</parametername>
</parameternamelist>
<parameterdescription>
<para>Parameter file handles </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">diag</parametername>
</parameternamelist>
<parameterdescription>
<para>Diagnostics control structure </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">cdp</parametername>
</parameternamelist>
<parameterdescription>
<para>Continuity equation diagnostics </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>cs</parametername>
</parameternamelist>
<parameterdescription>
<para>Control structure for thickness diffusion </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/parameterizations/lateral/MOM_thickness_diffuse.F90" line="1881" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/parameterizations/lateral/MOM_thickness_diffuse.F90" bodystart="1882" bodyend="2086"/>
        <references refid="namespacemom__error__handler_1a460cfb79a06c29fc249952c2a3710d67" compoundref="MOM__error__handler_8F90" startline="72" endline="92">mom_error_handler::mom_error</references>
        <referencedby refid="namespacemom_1a96708b16215666edbfa5b46228f3a200" compoundref="MOM_8F90" startline="1604" endline="2769">mom::initialize_mom</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespacemom__thickness__diffuse_1a96e66e8491141614027c1583aeaecd7a" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine, public</type>
        <definition>subroutine, public mom_thickness_diffuse::thickness_diffuse_get_kh</definition>
        <argsstring>(CS, KH_u_GME, KH_v_GME, G)</argsstring>
        <name>thickness_diffuse_get_kh</name>
        <param>
          <type>CS</type>
          <defname>CS</defname>
        </param>
        <param>
          <type>KH_u_GME</type>
          <defname>KH_u_GME</defname>
        </param>
        <param>
          <type>KH_v_GME</type>
          <defname>KH_v_GME</defname>
        </param>
        <param>
          <type>G</type>
          <defname>G</defname>
        </param>
        <briefdescription>
<para>Copies ubtav and vbtav from private type into arrays. </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername>cs</parametername>
</parameternamelist>
<parameterdescription>
<para>Control structure for this module </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">g</parametername>
</parameternamelist>
<parameterdescription>
<para>Grid structure </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">kh_u_gme</parametername>
</parameternamelist>
<parameterdescription>
<para>interface height diffusivities at u-faces [L2 T-1 ~&gt; m2 s-1] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">kh_v_gme</parametername>
</parameternamelist>
<parameterdescription>
<para>interface height diffusivities at v-faces [L2 T-1 ~&gt; m2 s-1] </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/parameterizations/lateral/MOM_thickness_diffuse.F90" line="2090" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/parameterizations/lateral/MOM_thickness_diffuse.F90" bodystart="2091" bodyend="2108"/>
        <referencedby refid="namespacemom__hor__visc_1ab3a26095634db15095b980e45137e1f1" compoundref="MOM__hor__visc_8F90" startline="217" endline="1411">mom_hor_visc::horizontal_viscosity</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespacemom__thickness__diffuse_1a1a3a5c750e8a2323afa82b118329378c" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine, public</type>
        <definition>subroutine, public mom_thickness_diffuse::thickness_diffuse_end</definition>
        <argsstring>(CS)</argsstring>
        <name>thickness_diffuse_end</name>
        <param>
          <type>CS</type>
          <defname>CS</defname>
        </param>
        <briefdescription>
<para>Deallocate the thickness diffusion control structure. </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername>cs</parametername>
</parameternamelist>
<parameterdescription>
<para>Control structure for thickness diffusion </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/parameterizations/lateral/MOM_thickness_diffuse.F90" line="2112" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/parameterizations/lateral/MOM_thickness_diffuse.F90" bodystart="2113" bodyend="2115"/>
      </memberdef>
      </sectiondef>
    <briefdescription>
<para>Thickness diffusion (or Gent McWilliams) </para>
    </briefdescription>
    <detaileddescription>
<sect1 id="namespacemom__thickness__diffuse_1section_gm">
<title>Thickness diffusion (aka Gent-McWilliams)</title>
<para>Thickness diffusion is implemented via along-layer mass fluxes <formula id="404">\[ h^\dagger \leftarrow h^n - \Delta t \nabla \cdot ( \vec{uh}^* ) \]</formula> where the mass fluxes are cast as the difference in vector streamfunction</para>
<para><formula id="405">\[ \vec{uh}^* = \delta_k \vec{\psi} . \]</formula></para>
<para>The GM implementation of thickness diffusion made the streamfunction proportional to the potential density slope <formula id="406">\[ \vec{\psi} = - \kappa_h \frac{\nabla_z \rho}{\partial_z \rho} = \frac{g\kappa_h}{\rho_o} \frac{\nabla \rho}{N^2} = \kappa_h \frac{M^2}{N^2} \]</formula> but for robustness the scheme is implemented as <formula id="407">\[ \vec{\psi} = \kappa_h \frac{M^2}{\sqrt{N^4 + M^4}} \]</formula> since the quantity <formula id="408">$\frac{M^2}{\sqrt{N^2 + M^2}}$</formula> is bounded between $-1$ and $1$ and does not change sign if <formula id="409">$N^2&lt;0$</formula>.</para>
<para>Optionally, the method of Ferrari et al, 2010, can be used to obtain the streamfunction which solves the vertically elliptic equation: <formula id="410">\[ \gamma_F \partial_z c^2 \partial_z \psi - N_*^2 \psi = ( 1 + \gamma_F ) \kappa_h N_*^2 \frac{M^2}{\sqrt{N^4+M^4}} \]</formula> which recovers the previous streamfunction relation in the limit that <formula id="411">$ c \rightarrow 0 $</formula>. Here, <formula id="412">$c=\max(c_{min},c_g)$</formula> is the maximum of either <formula id="413">$c_{min}$</formula> and either the first baroclinic mode wave-speed or the equivalent barotropic mode wave-speed. <formula id="414">$N_*^2 = \max(N^2,0)$</formula> is a non-negative form of the square of the Brunt-Vaisala frequency. The parameter <formula id="415">$\gamma_F$</formula> is used to reduce the vertical smoothing length scale. <formula id="416">\[ \kappa_h = \left( \kappa_o + \alpha_{s} L_{s}^2 &lt; S N &gt; + \alpha_{M} \kappa_{M} \right) r(\Delta x,L_d) \]</formula> where <formula id="417">$ S $</formula> is the isoneutral slope magnitude, <formula id="418">$ N $</formula> is the square root of Brunt-Vaisala frequency, <formula id="419">$\kappa_{M}$</formula> is the diffusivity calculated by the MEKE parameterization (<ref refid="namespacemom__meke" kindref="compound">mom_meke</ref> module) and <formula id="420">$ r(\Delta x,L_d) $</formula> is a function of the local resolution (ratio of grid-spacing, <formula id="421">$\Delta x$</formula>, to deformation radius, <formula id="422">$L_d$</formula>). The length <formula id="423">$L_s$</formula> is provided by the <ref refid="namespacemom__lateral__mixing__coeffs" kindref="compound">mom_lateral_mixing_coeffs</ref> module (enabled with <computeroutput>USE_VARIABLE_MIXING=True</computeroutput> and the term <formula id="424">$&lt;SN&gt;$</formula> is the vertical average slope times the Brunt-Vaisala frequency prescribed by Visbeck et al., 1996.</para>
<para>The result of the above expression is subsequently bounded by minimum and maximum values, including an upper diffusivity consistent with numerical stability ( <formula id="425">$ \kappa_{cfl} $</formula> is calculated internally). <formula id="426">\[ \kappa_h \leftarrow \min{\left( \kappa_{max}, \kappa_{cfl}, \max{\left( \kappa_{min}, \kappa_h \right)} \right)} f(c_g,z) \]</formula></para>
<para>where <formula id="427">$f(c_g,z)$</formula> is a vertical structure function. <formula id="427">$f(c_g,z)$</formula> is calculated in module <ref refid="namespacemom__lateral__mixing__coeffs" kindref="compound">mom_lateral_mixing_coeffs</ref>. If <computeroutput>KHTH_USE_EBT_STRUCT=True</computeroutput> then <formula id="427">$f(c_g,z)$</formula> is set to look like the equivalent barotropic modal velocity structure. Otherwise <formula id="428">$f(c_g,z)=1$</formula> and the diffusivity is independent of depth.</para>
<para>In order to calculate meaningful slopes in vanished layers, temporary copies of the thermodynamic variables are passed through a vertical smoother, function <ref refid="namespacemom__isopycnal__slopes_1a34691482caaff356da3c5182657dba0d" kindref="member">vert_fill_ts()</ref>: <formula id="429">\begin{eqnarray*} \left[ 1 + \Delta t \kappa_{smth} \frac{\partial^2}{\partial_z^2} \right] \theta &amp; \leftarrow &amp; \theta \\ \left[ 1 + \Delta t \kappa_{smth} \frac{\partial^2}{\partial_z^2} \right] s &amp; \leftarrow &amp; s \end{eqnarray*}</formula></para>
<sect2 id="namespacemom__thickness__diffuse_1section_khth_module_parameters">
<title>Module mom_thickness_diffuse parameters</title>
<para><table rows="13" cols="2"><row>
<entry thead="yes"><para>Symbol  </para>
</entry><entry thead="yes"><para>Module parameter   </para>
</entry></row>
<row>
<entry thead="no"><para>-  </para>
</entry><entry thead="no"><para><computeroutput>THICKNESSDIFFUSE</computeroutput>   </para>
</entry></row>
<row>
<entry thead="no"><para><formula id="430">$ \kappa_o $</formula>  </para>
</entry><entry thead="no"><para><computeroutput>KHTH</computeroutput>   </para>
</entry></row>
<row>
<entry thead="no"><para><formula id="431">$ \alpha_{s} $</formula>  </para>
</entry><entry thead="no"><para><computeroutput>KHTH_SLOPE_CFF</computeroutput>   </para>
</entry></row>
<row>
<entry thead="no"><para><formula id="432">$ \kappa_{min} $</formula>  </para>
</entry><entry thead="no"><para><computeroutput>KHTH_MIN</computeroutput>   </para>
</entry></row>
<row>
<entry thead="no"><para><formula id="433">$ \kappa_{max} $</formula>  </para>
</entry><entry thead="no"><para><computeroutput>KHTH_MAX</computeroutput>   </para>
</entry></row>
<row>
<entry thead="no"><para>-  </para>
</entry><entry thead="no"><para><computeroutput>KHTH_MAX_CFL</computeroutput>   </para>
</entry></row>
<row>
<entry thead="no"><para><formula id="434">$ \kappa_{smth} $</formula>  </para>
</entry><entry thead="no"><para><computeroutput>KD_SMOOTH</computeroutput>   </para>
</entry></row>
<row>
<entry thead="no"><para><formula id="435">$ \alpha_{M} $</formula>  </para>
</entry><entry thead="no"><para><computeroutput>MEKE_KHTH_FAC</computeroutput> (from <ref refid="namespacemom__meke" kindref="compound">mom_meke</ref> module)   </para>
</entry></row>
<row>
<entry thead="no"><para>-  </para>
</entry><entry thead="no"><para><computeroutput>KHTH_USE_EBT_STRUCT</computeroutput> (from <ref refid="namespacemom__lateral__mixing__coeffs" kindref="compound">mom_lateral_mixing_coeffs</ref> module)   </para>
</entry></row>
<row>
<entry thead="no"><para>-  </para>
</entry><entry thead="no"><para><computeroutput>KHTH_USE_FGNV_STREAMFUNCTION</computeroutput>   </para>
</entry></row>
<row>
<entry thead="no"><para><formula id="436">$ \gamma_F $</formula>  </para>
</entry><entry thead="no"><para><computeroutput>FGNV_FILTER_SCALE</computeroutput>   </para>
</entry></row>
<row>
<entry thead="no"><para><formula id="437">$ c_{min} $</formula>  </para>
</entry><entry thead="no"><para><computeroutput>FGNV_C_MIN</computeroutput>   </para>
</entry></row>
</table>
</para>
</sect2>
<sect2 id="namespacemom__thickness__diffuse_1section_khth_module_reference">
<title>References</title>
<para>Ferrari, R., S.M. Griffies, A.J.G. Nurser and G.K. Vallis, 2010: A boundary-value problem for the parameterized mesoscale eddy transport. Ocean Modelling, 32, 143-156. <ulink url="http://doi.org/10.1016/j.ocemod.2010.01.004">http://doi.org/10.1016/j.ocemod.2010.01.004</ulink></para>
<para>Viscbeck, M., J.C. Marshall, H. Jones, 1996: Dynamics of isolated convective regions in the ocean. J. Phys. Oceangr., 26, 1721-1734. <ulink url="http://dx.doi.org/10.1175/1520-0485(1996)026%3C1721:DOICRI%3E2.0.CO;2">http://dx.doi.org/10.1175/1520-0485(1996)026%3C1721:DOICRI%3E2.0.CO;2</ulink> </para>
</sect2>
</sect1>
    </detaileddescription>
    <location file="/home/cermak/src/MOM6.devrob/src/parameterizations/lateral/MOM_thickness_diffuse.F90" line="2" column="1"/>
  </compounddef>
</doxygen>
