<?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.15">
  <compounddef id="namespacemom__vert__friction" kind="namespace" language="Fortran">
    <compoundname>mom_vert_friction</compoundname>
    <innerclass refid="structmom__vert__friction_1_1vertvisc__cs" prot="public">mom_vert_friction::vertvisc_cs</innerclass>
      <sectiondef kind="func">
      <memberdef kind="function" id="namespacemom__vert__friction_1a8f1a390fa24fbe985068fed9ac26873c" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine, public</type>
        <definition>subroutine, public mom_vert_friction::vertvisc</definition>
        <argsstring>(u, v, h, forces, visc, dt, OBC, ADp, CDp, G, GV, US, CS, taux_bot, tauy_bot, Waves)</argsstring>
        <name>vertvisc</name>
        <param>
          <type>u</type>
          <defname>u</defname>
        </param>
        <param>
          <type>v</type>
          <defname>v</defname>
        </param>
        <param>
          <type>h</type>
          <defname>h</defname>
        </param>
        <param>
          <type>forces</type>
          <defname>forces</defname>
        </param>
        <param>
          <type>visc</type>
          <defname>visc</defname>
        </param>
        <param>
          <type>dt</type>
          <defname>dt</defname>
        </param>
        <param>
          <type>OBC</type>
          <defname>OBC</defname>
        </param>
        <param>
          <type>ADp</type>
          <defname>ADp</defname>
        </param>
        <param>
          <type>CDp</type>
          <defname>CDp</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>taux_bot</type>
          <defname>taux_bot</defname>
        </param>
        <param>
          <type>tauy_bot</type>
          <defname>tauy_bot</defname>
        </param>
        <param>
          <type>Waves</type>
          <defname>Waves</defname>
        </param>
        <briefdescription>
<para>Perform a fully implicit vertical diffusion of momentum. Stress top and bottom boundary conditions are used. </para>
        </briefdescription>
        <detaileddescription>
<para>This is solving the tridiagonal system <formula id="452">\[ \left(h_k + a_{k + 1/2} + a_{k - 1/2} + r_k\right) u_k^{n+1} = h_k u_k^n + a_{k + 1/2} u_{k+1}^{n+1} + a_{k - 1/2} u_{k-1}^{n+1} \]</formula> where <formula id="453">$a_{k + 1/2} = \Delta t \nu_{k + 1/2} / h_{k + 1/2}$</formula> is the <emphasis>interfacial coupling thickness per time step</emphasis>, encompassing background viscosity as well as contributions from enhanced mixed and bottom layer viscosities. $r_k$ is a Rayleight drag term due to channel drag. There is an additional stress term on the right-hand side if DIRECT_STRESS is true, applied to the surface layer. <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>Ocean 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">u</parametername>
</parameternamelist>
<parameterdescription>
<para>Zonal velocity [L T-1 ~&gt; m s-1] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">v</parametername>
</parameternamelist>
<parameterdescription>
<para>Meridional velocity [L T-1 ~&gt; m s-1] </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">forces</parametername>
</parameternamelist>
<parameterdescription>
<para>A structure with the driving mechanical forces </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">visc</parametername>
</parameternamelist>
<parameterdescription>
<para>Viscosities and bottom drag </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">dt</parametername>
</parameternamelist>
<parameterdescription>
<para>Time increment [T ~&gt; s] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>obc</parametername>
</parameternamelist>
<parameterdescription>
<para>Open boundary condition structure </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">adp</parametername>
</parameternamelist>
<parameterdescription>
<para>Accelerations in the momentum equations for diagnostics </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">cdp</parametername>
</parameternamelist>
<parameterdescription>
<para>Continuity equation terms </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>cs</parametername>
</parameternamelist>
<parameterdescription>
<para>Vertical viscosity control structure </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="out">taux_bot</parametername>
</parameternamelist>
<parameterdescription>
<para>Zonal bottom stress from ocean to </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="out">tauy_bot</parametername>
</parameternamelist>
<parameterdescription>
<para>Meridional bottom stress from ocean to </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>waves</parametername>
</parameternamelist>
<parameterdescription>
<para>Container for wave/Stokes information </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/parameterizations/vertical/MOM_vert_friction.F90" line="157" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/parameterizations/vertical/MOM_vert_friction.F90" bodystart="159" bodyend="501"/>
        <references refid="namespacemom__error__handler_1a460cfb79a06c29fc249952c2a3710d67" compoundref="MOM__error__handler_8F90" startline="72" endline="92">mom_error_handler::mom_error</references>
        <references refid="namespacemom__vert__friction_1ac14bc439f3b7ae3000fa9883c95ebfe2" compoundref="MOM__vert__friction_8F90" startline="1369" endline="1574">vertvisc_limit_vel</references>
        <referencedby refid="namespacemom__dynamics__unsplit_1ab72d911d187f9247b6cc72d87e815370" compoundref="MOM__dynamics__unsplit_8F90" startline="192" endline="507">mom_dynamics_unsplit::step_mom_dyn_unsplit</referencedby>
        <referencedby refid="namespacemom__dynamics__unsplit__rk2_1a25424d65cc3339442e528c0a92b173a3" compoundref="MOM__dynamics__unsplit__RK2_8F90" startline="194" endline="452">mom_dynamics_unsplit_rk2::step_mom_dyn_unsplit_rk2</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespacemom__vert__friction_1ad0b7bdc6695ee0c4207797bc94672863" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine, public</type>
        <definition>subroutine, public mom_vert_friction::vertvisc_remnant</definition>
        <argsstring>(visc, visc_rem_u, visc_rem_v, dt, G, GV, US, CS)</argsstring>
        <name>vertvisc_remnant</name>
        <param>
          <type>visc</type>
          <defname>visc</defname>
        </param>
        <param>
          <type>visc_rem_u</type>
          <defname>visc_rem_u</defname>
        </param>
        <param>
          <type>visc_rem_v</type>
          <defname>visc_rem_v</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>
        <briefdescription>
<para>Calculate the fraction of momentum originally in a layer that remains after a time-step of viscosity, and the fraction of a time-step&apos;s worth of barotropic acceleration that a layer experiences after viscosity is applied. </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>Ocean vertical grid structure </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">visc</parametername>
</parameternamelist>
<parameterdescription>
<para>Viscosities and bottom drag </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">visc_rem_u</parametername>
</parameternamelist>
<parameterdescription>
<para>Fraction of a time-step&apos;s worth of a </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">visc_rem_v</parametername>
</parameternamelist>
<parameterdescription>
<para>Fraction of a time-step&apos;s worth of a </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">dt</parametername>
</parameternamelist>
<parameterdescription>
<para>Time increment [T ~&gt; s] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">us</parametername>
</parameternamelist>
<parameterdescription>
<para>A dimensional unit scaling type </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>cs</parametername>
</parameternamelist>
<parameterdescription>
<para>Vertical viscosity control structure </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/parameterizations/vertical/MOM_vert_friction.F90" line="508" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/parameterizations/vertical/MOM_vert_friction.F90" bodystart="509" bodyend="610"/>
        <references refid="namespacemom__error__handler_1a460cfb79a06c29fc249952c2a3710d67" compoundref="MOM__error__handler_8F90" startline="72" endline="92">mom_error_handler::mom_error</references>
      </memberdef>
      <memberdef kind="function" id="namespacemom__vert__friction_1ac281f6595593b33436594112785e982b" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine, public</type>
        <definition>subroutine, public mom_vert_friction::vertvisc_coef</definition>
        <argsstring>(u, v, h, forces, visc, dt, G, GV, US, CS, OBC)</argsstring>
        <name>vertvisc_coef</name>
        <param>
          <type>u</type>
          <defname>u</defname>
        </param>
        <param>
          <type>v</type>
          <defname>v</defname>
        </param>
        <param>
          <type>h</type>
          <defname>h</defname>
        </param>
        <param>
          <type>forces</type>
          <defname>forces</defname>
        </param>
        <param>
          <type>visc</type>
          <defname>visc</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>OBC</type>
          <defname>OBC</defname>
        </param>
        <briefdescription>
<para>Calculate the coupling coefficients (CSa_u and CSa_v) and effective layer thicknesses (CSh_u and CSh_v) for later use in the applying the implicit vertical viscosity via <ref refid="namespacemom__vert__friction_1a8f1a390fa24fbe985068fed9ac26873c" kindref="member">vertvisc()</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>Ocean 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">u</parametername>
</parameternamelist>
<parameterdescription>
<para>Zonal velocity [L T-1 ~&gt; m s-1] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">v</parametername>
</parameternamelist>
<parameterdescription>
<para>Meridional velocity [L T-1 ~&gt; m s-1] </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">forces</parametername>
</parameternamelist>
<parameterdescription>
<para>A structure with the driving mechanical forces </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">visc</parametername>
</parameternamelist>
<parameterdescription>
<para>Viscosities and bottom drag </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>Vertical viscosity control structure </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>obc</parametername>
</parameternamelist>
<parameterdescription>
<para>Open boundary condition structure </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/parameterizations/vertical/MOM_vert_friction.F90" line="617" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/parameterizations/vertical/MOM_vert_friction.F90" bodystart="618" bodyend="1084"/>
        <references refid="namespacemom__vert__friction_1aa9e6f1f0d75a54d85b0d0cdad874b41f" compoundref="MOM__vert__friction_8F90" startline="1092" endline="1362">find_coupling_coef</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__open__boundary_1a6ace8760d7fa465a59d8cbc3340a5b5e" compoundref="MOM__open__boundary_8F90" startline="73" endline="73">mom_open_boundary::obc_direction_n</references>
        <references refid="namespacemom__open__boundary_1a29aee121a765fc751bd1c21adf80af10" compoundref="MOM__open__boundary_8F90" startline="74" endline="74">mom_open_boundary::obc_direction_s</references>
        <references refid="namespacemom__open__boundary_1a015e27a65957919ea3cd67767b8f26f7" compoundref="MOM__open__boundary_8F90" startline="76" endline="76">mom_open_boundary::obc_direction_w</references>
        <referencedby refid="namespacemom__dynamics__unsplit_1ab72d911d187f9247b6cc72d87e815370" compoundref="MOM__dynamics__unsplit_8F90" startline="192" endline="507">mom_dynamics_unsplit::step_mom_dyn_unsplit</referencedby>
        <referencedby refid="namespacemom__dynamics__unsplit__rk2_1a25424d65cc3339442e528c0a92b173a3" compoundref="MOM__dynamics__unsplit__RK2_8F90" startline="194" endline="452">mom_dynamics_unsplit_rk2::step_mom_dyn_unsplit_rk2</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespacemom__vert__friction_1aa9e6f1f0d75a54d85b0d0cdad874b41f" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine</type>
        <definition>subroutine mom_vert_friction::find_coupling_coef</definition>
        <argsstring>(a_cpl, hvel, do_i, h_harm, bbl_thick, kv_bbl, z_i, h_ml, dt, j, G, GV, US, CS, visc, forces, work_on_u, OBC, shelf)</argsstring>
        <name>find_coupling_coef</name>
        <param>
          <type>a_cpl</type>
          <defname>a_cpl</defname>
        </param>
        <param>
          <type>hvel</type>
          <defname>hvel</defname>
        </param>
        <param>
          <type>do_i</type>
          <defname>do_i</defname>
        </param>
        <param>
          <type>h_harm</type>
          <defname>h_harm</defname>
        </param>
        <param>
          <type>bbl_thick</type>
          <defname>bbl_thick</defname>
        </param>
        <param>
          <type>kv_bbl</type>
          <defname>kv_bbl</defname>
        </param>
        <param>
          <type>z_i</type>
          <defname>z_i</defname>
        </param>
        <param>
          <type>h_ml</type>
          <defname>h_ml</defname>
        </param>
        <param>
          <type>dt</type>
          <defname>dt</defname>
        </param>
        <param>
          <type>j</type>
          <defname>j</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>visc</type>
          <defname>visc</defname>
        </param>
        <param>
          <type>forces</type>
          <defname>forces</defname>
        </param>
        <param>
          <type>work_on_u</type>
          <defname>work_on_u</defname>
        </param>
        <param>
          <type>OBC</type>
          <defname>OBC</defname>
        </param>
        <param>
          <type>shelf</type>
          <defname>shelf</defname>
        </param>
        <briefdescription>
<para>Calculate the &apos;coupling coefficient&apos; (a_cpl) at the interfaces. If BOTTOMDRAGLAW is defined, the minimum of Hbbl and half the adjacent layer thicknesses are used to calculate a_cpl near the bottom. </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>Ocean 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="out">a_cpl</parametername>
</parameternamelist>
<parameterdescription>
<para>Coupling coefficient across interfaces [Z T-1 ~&gt; m s-1]. </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">hvel</parametername>
</parameternamelist>
<parameterdescription>
<para>Thickness at velocity points [H ~&gt; m or kg m-2] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">do_i</parametername>
</parameternamelist>
<parameterdescription>
<para>If true, determine coupling coefficient for a column </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">h_harm</parametername>
</parameternamelist>
<parameterdescription>
<para>Harmonic mean of thicknesses around a velocity </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">bbl_thick</parametername>
</parameternamelist>
<parameterdescription>
<para>Bottom boundary layer thickness [H ~&gt; m or kg m-2] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">kv_bbl</parametername>
</parameternamelist>
<parameterdescription>
<para>Bottom boundary layer viscosity [Z2 T-1 ~&gt; m2 s-1]. </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">z_i</parametername>
</parameternamelist>
<parameterdescription>
<para>Estimate of interface heights above the bottom, </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="out">h_ml</parametername>
</parameternamelist>
<parameterdescription>
<para>Mixed layer depth [H ~&gt; m or kg m-2] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">j</parametername>
</parameternamelist>
<parameterdescription>
<para>j-index to find coupling coefficient for </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>Vertical viscosity control structure </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">visc</parametername>
</parameternamelist>
<parameterdescription>
<para>Structure containing viscosities and bottom drag </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">forces</parametername>
</parameternamelist>
<parameterdescription>
<para>A structure with the driving mechanical forces </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">work_on_u</parametername>
</parameternamelist>
<parameterdescription>
<para>If true, u-points are being calculated, otherwise they are v-points </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>obc</parametername>
</parameternamelist>
<parameterdescription>
<para>Open boundary condition structure </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">shelf</parametername>
</parameternamelist>
<parameterdescription>
<para>If present and true, use a surface boundary condition appropriate for an ice shelf. </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/parameterizations/vertical/MOM_vert_friction.F90" line="1090" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/parameterizations/vertical/MOM_vert_friction.F90" bodystart="1092" bodyend="1362"/>
        <references refid="namespacemom__open__boundary_1a6ace8760d7fa465a59d8cbc3340a5b5e" compoundref="MOM__open__boundary_8F90" startline="73" endline="73">mom_open_boundary::obc_direction_n</references>
        <references refid="namespacemom__open__boundary_1a29aee121a765fc751bd1c21adf80af10" compoundref="MOM__open__boundary_8F90" startline="74" endline="74">mom_open_boundary::obc_direction_s</references>
        <references refid="namespacemom__open__boundary_1a015e27a65957919ea3cd67767b8f26f7" compoundref="MOM__open__boundary_8F90" startline="76" endline="76">mom_open_boundary::obc_direction_w</references>
        <referencedby refid="namespacemom__vert__friction_1ac281f6595593b33436594112785e982b" compoundref="MOM__vert__friction_8F90" startline="618" endline="1084">vertvisc_coef</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespacemom__vert__friction_1ac14bc439f3b7ae3000fa9883c95ebfe2" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine, public</type>
        <definition>subroutine, public mom_vert_friction::vertvisc_limit_vel</definition>
        <argsstring>(u, v, h, ADp, CDp, forces, visc, dt, G, GV, US, CS)</argsstring>
        <name>vertvisc_limit_vel</name>
        <param>
          <type>u</type>
          <defname>u</defname>
        </param>
        <param>
          <type>v</type>
          <defname>v</defname>
        </param>
        <param>
          <type>h</type>
          <defname>h</defname>
        </param>
        <param>
          <type>ADp</type>
          <defname>ADp</defname>
        </param>
        <param>
          <type>CDp</type>
          <defname>CDp</defname>
        </param>
        <param>
          <type>forces</type>
          <defname>forces</defname>
        </param>
        <param>
          <type>visc</type>
          <defname>visc</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>
        <briefdescription>
<para>Velocity components which exceed a threshold for physically reasonable values are truncated. Optionally, any column with excessive velocities may be sent to a diagnostic reporting subroutine. </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>Ocean 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">u</parametername>
</parameternamelist>
<parameterdescription>
<para>Zonal velocity [L T-1 ~&gt; m s-1] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">v</parametername>
</parameternamelist>
<parameterdescription>
<para>Meridional velocity [L T-1 ~&gt; m s-1] </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">adp</parametername>
</parameternamelist>
<parameterdescription>
<para>Acceleration diagnostic pointers </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">cdp</parametername>
</parameternamelist>
<parameterdescription>
<para>Continuity diagnostic pointers </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">forces</parametername>
</parameternamelist>
<parameterdescription>
<para>A structure with the driving mechanical forces </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">visc</parametername>
</parameternamelist>
<parameterdescription>
<para>Viscosities and bottom drag </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>Vertical viscosity control structure </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/parameterizations/vertical/MOM_vert_friction.F90" line="1368" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/parameterizations/vertical/MOM_vert_friction.F90" bodystart="1369" bodyend="1574"/>
        <referencedby refid="namespacemom__vert__friction_1a8f1a390fa24fbe985068fed9ac26873c" compoundref="MOM__vert__friction_8F90" startline="159" endline="501">vertvisc</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespacemom__vert__friction_1a4bd5c8772584e41890bff55ccd52507c" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine, public</type>
        <definition>subroutine, public mom_vert_friction::vertvisc_init</definition>
        <argsstring>(MIS, Time, G, GV, US, param_file, diag, ADp, dirs, ntrunc, CS)</argsstring>
        <name>vertvisc_init</name>
        <param>
          <type>MIS</type>
          <defname>MIS</defname>
        </param>
        <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>ADp</type>
          <defname>ADp</defname>
        </param>
        <param>
          <type>dirs</type>
          <defname>dirs</defname>
        </param>
        <param>
          <type>ntrunc</type>
          <defname>ntrunc</defname>
        </param>
        <param>
          <type>CS</type>
          <defname>CS</defname>
        </param>
        <briefdescription>
<para>Initialize the vertical friction module. </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="in">mis</parametername>
</parameternamelist>
<parameterdescription>
<para>The &quot;MOM Internal State&quot;, a set of pointers </para>
</parameterdescription>
</parameteritem>
<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>Ocean 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>File to parse for parameters </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">diag</parametername>
</parameternamelist>
<parameterdescription>
<para>Diagnostic control structure </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">adp</parametername>
</parameternamelist>
<parameterdescription>
<para>Acceleration diagnostic pointers </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">dirs</parametername>
</parameternamelist>
<parameterdescription>
<para>Relevant directory paths </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">ntrunc</parametername>
</parameternamelist>
<parameterdescription>
<para>Number of velocity truncations </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>cs</parametername>
</parameternamelist>
<parameterdescription>
<para>Vertical viscosity control structure </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/parameterizations/vertical/MOM_vert_friction.F90" line="1578" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/parameterizations/vertical/MOM_vert_friction.F90" bodystart="1580" bodyend="1845"/>
        <references refid="namespacemom__error__handler_1a460cfb79a06c29fc249952c2a3710d67" compoundref="MOM__error__handler_8F90" startline="72" endline="92">mom_error_handler::mom_error</references>
      </memberdef>
      <memberdef kind="function" id="namespacemom__vert__friction_1a62e586a80ed4bdd3fd27ab62ca4c054f" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine, public</type>
        <definition>subroutine, public mom_vert_friction::updatecfltruncationvalue</definition>
        <argsstring>(Time, CS, activate)</argsstring>
        <name>updatecfltruncationvalue</name>
        <param>
          <type>Time</type>
          <defname>Time</defname>
        </param>
        <param>
          <type>CS</type>
          <defname>CS</defname>
        </param>
        <param>
          <type>activate</type>
          <defname>activate</defname>
        </param>
        <briefdescription>
<para>Update the CFL truncation value as a function of time. If called with the optional argument activate=.true., record the value of Time as the beginning of the ramp period. </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>cs</parametername>
</parameternamelist>
<parameterdescription>
<para>Vertical viscosity control structure </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">activate</parametername>
</parameternamelist>
<parameterdescription>
<para>Specifiy whether to record the value of Time as the beginning of the ramp period </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/parameterizations/vertical/MOM_vert_friction.F90" line="1851" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/parameterizations/vertical/MOM_vert_friction.F90" bodystart="1852" bodyend="1885"/>
        <references refid="namespacemom__error__handler_1a460cfb79a06c29fc249952c2a3710d67" compoundref="MOM__error__handler_8F90" startline="72" endline="92">mom_error_handler::mom_error</references>
        <referencedby refid="namespacemom__dynamics__split__rk2_1a976e700971f232fc11bc69b31d611c32" compoundref="MOM__dynamics__split__RK2_8F90" startline="245" endline="994">mom_dynamics_split_rk2::step_mom_dyn_split_rk2</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespacemom__vert__friction_1a158d29cf5c1d79ca7c5f327706855972" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine, public</type>
        <definition>subroutine, public mom_vert_friction::vertvisc_end</definition>
        <argsstring>(CS)</argsstring>
        <name>vertvisc_end</name>
        <param>
          <type>CS</type>
          <defname>CS</defname>
        </param>
        <briefdescription>
<para>Clean up and deallocate the vertical friction module. </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername>cs</parametername>
</parameternamelist>
<parameterdescription>
<para>Vertical viscosity control structure that will be deallocated in this subroutine. </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/parameterizations/vertical/MOM_vert_friction.F90" line="1889" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/parameterizations/vertical/MOM_vert_friction.F90" bodystart="1890" bodyend="1897"/>
      </memberdef>
      </sectiondef>
    <briefdescription>
<para>Implements vertical viscosity (vertvisc) </para>
    </briefdescription>
    <detaileddescription>
<para><simplesect kind="author"><para>Robert Hallberg </para>
</simplesect>
<simplesect kind="date"><para>April 1994 - October 2006</para>
</simplesect>
The vertical diffusion of momentum is fully implicit. This is necessary to allow for vanishingly small layers. The coupling is based on the distance between the centers of adjacent layers, except where a layer is close to the bottom compared with a bottom boundary layer thickness when a bottom drag law is used. A stress top b.c. and a no slip bottom b.c. are used. There is no limit on the time step for vertvisc.</para>
<para>Near the bottom, the horizontal thickness interpolation scheme changes to an upwind biased estimate to control the effect of spurious Montgomery potential gradients at the bottom where nearly massless layers layers ride over the topography. Within a few boundary layer depths of the bottom, the harmonic mean thickness (i.e. (2 h+ h-) / (h+ + h-) ) is used if the velocity is from the thinner side and the arithmetic mean thickness (i.e. (h+ + h-)/2) is used if the velocity is from the thicker side. Both of these thickness estimates are second order accurate. Above this the arithmetic mean thickness is used.</para>
<para>In addition, vertvisc truncates any velocity component that exceeds maxvel to truncvel. This basically keeps instabilities spatially localized. The number of times the velocity is truncated is reported each time the energies are saved, and if exceeds CSMaxtrunc the model will stop itself and change the time to a large value. This has proven very useful in (1) diagnosing model failures and (2) letting the model settle down to a meaningful integration from a poorly specified initial condition.</para>
<para>The same code is used for the two velocity components, by indirectly referencing the velocities and defining a handful of direction-specific defined variables.</para>
<para>Macros written all in capital letters are defined in <ref refid="MOM__memory_8h" kindref="compound">MOM_memory.h</ref>.</para>
<para>A small fragment of the grid is shown below: <verbatim>    j+1  x ^ x ^ x   At x:  q
    j+1  &gt; o &gt; o &gt;   At ^:  v, frhatv, tauy
    j    x ^ x ^ x   At &gt;:  u, frhatu, taux
    j    &gt; o &gt; o &gt;   At o:  h
    j-1  x ^ x ^ x
        i-1  i  i+1  At x &amp; ^:
           i  i+1    At &gt; &amp; o:</verbatim></para>
<para>The boundaries always run through q grid points (x). </para>
    </detaileddescription>
    <location file="/home/cermak/src/MOM6.devrob/src/parameterizations/vertical/MOM_vert_friction.F90" line="2" column="1"/>
  </compounddef>
</doxygen>
