<?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.17">
  <compounddef id="namespacemom__hor__visc" kind="namespace" language="Fortran">
    <compoundname>mom_hor_visc</compoundname>
    <innerclass refid="structmom__hor__visc_1_1hor__visc__cs" prot="public">mom_hor_visc::hor_visc_cs</innerclass>
      <sectiondef kind="func">
      <memberdef kind="function" id="namespacemom__hor__visc_1ab3a26095634db15095b980e45137e1f1" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine, public</type>
        <definition>subroutine, public mom_hor_visc::horizontal_viscosity</definition>
        <argsstring>(u, v, h, diffu, diffv, MEKE, VarMix, G, GV, US, CS, OBC, BT, TD, ADp)</argsstring>
        <name>horizontal_viscosity</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>diffu</type>
          <defname>diffu</defname>
        </param>
        <param>
          <type>diffv</type>
          <defname>diffv</defname>
        </param>
        <param>
          <type>MEKE</type>
          <defname>MEKE</defname>
        </param>
        <param>
          <type>VarMix</type>
          <defname>VarMix</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>
        <param>
          <type>BT</type>
          <defname>BT</defname>
        </param>
        <param>
          <type>TD</type>
          <defname>TD</defname>
        </param>
        <param>
          <type>ADp</type>
          <defname>ADp</defname>
        </param>
        <briefdescription>
<para>Calculates the acceleration due to the horizontal viscosity. </para>
        </briefdescription>
        <detaileddescription>
<para>A combination of biharmonic and Laplacian forms can be used. The coefficient may either be a constant or a shear-dependent form. The biharmonic is determined by twice taking the divergence of an appropriately defined stress tensor. The Laplacian is determined by doing so once.</para>
<para>To work, the following fields must be set outside of the usual is:ie range before this subroutine is called: u[is-2:ie+2,js-2:je+2] v[is-2:ie+2,js-2:je+2] h[is-1:ie+1,js-1:je+1] <parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="in">g</parametername>
</parameternamelist>
<parameterdescription>
<para>The ocean&apos;s grid structure. </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">gv</parametername>
</parameternamelist>
<parameterdescription>
<para>The ocean&apos;s vertical grid structure. </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">u</parametername>
</parameternamelist>
<parameterdescription>
<para>The zonal velocity [L T-1 ~&gt; m s-1]. </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">v</parametername>
</parameternamelist>
<parameterdescription>
<para>The meridional velocity [L T-1 ~&gt; m s-1]. </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">h</parametername>
</parameternamelist>
<parameterdescription>
<para>Layer thicknesses [H ~&gt; m or kg m-2]. </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="out">diffu</parametername>
</parameternamelist>
<parameterdescription>
<para>Zonal acceleration due to convergence of </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="out">diffv</parametername>
</parameternamelist>
<parameterdescription>
<para>Meridional acceleration due to convergence </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>meke</parametername>
</parameternamelist>
<parameterdescription>
<para>Pointer to a structure containing fields related to Mesoscale Eddy Kinetic Energy. </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>varmix</parametername>
</parameternamelist>
<parameterdescription>
<para>Pointer to a structure with fields that specify the spatially variable viscosities </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>Control structure returned by a previous call to hor_visc_init. </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>obc</parametername>
</parameternamelist>
<parameterdescription>
<para>Pointer to an open boundary condition type </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>bt</parametername>
</parameternamelist>
<parameterdescription>
<para>Pointer to a structure containing barotropic velocities. </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>td</parametername>
</parameternamelist>
<parameterdescription>
<para>Pointer to a structure containing thickness diffusivities. </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>adp</parametername>
</parameternamelist>
<parameterdescription>
<para>Acceleration diagnostic pointers </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/parameterizations/lateral/MOM_hor_visc.F90" line="215" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/parameterizations/lateral/MOM_hor_visc.F90" bodystart="217" bodyend="1411"/>
        <references refid="namespacemom__barotropic_1aa059fdf7e6002b13d942f96ef17a5db6" compoundref="MOM__barotropic_8F90" startline="4924" endline="4941">mom_barotropic::barotropic_get_tav</references>
        <references refid="namespacemom__lateral__mixing__coeffs_1a212e9e850d4db8f321e0398f4090fee0" compoundref="MOM__lateral__mixing__coeffs_8F90" startline="808" endline="932">mom_lateral_mixing_coeffs::calc_qg_leith_viscosity</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__hor__visc_1a686fed1d7dd5311ab016b6f637aa7304" compoundref="MOM__hor__visc_8F90" startline="2192" endline="2249">smooth_gme</references>
        <references refid="namespacemom__thickness__diffuse_1a96e66e8491141614027c1583aeaecd7a" compoundref="MOM__thickness__diffuse_8F90" startline="2091" endline="2108">mom_thickness_diffuse::thickness_diffuse_get_kh</references>
        <referencedby refid="namespacemom__dynamics__split__rk2_1a3995d7e0c8fb36abdc7166ea4fe586d1" compoundref="MOM__dynamics__split__RK2_8F90" startline="1077" endline="1438">mom_dynamics_split_rk2::initialize_dyn_split_rk2</referencedby>
        <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>
        <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__hor__visc_1ae9e2abbb7908dbd548c8f6ce335c5303" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine, public</type>
        <definition>subroutine, public mom_hor_visc::hor_visc_init</definition>
        <argsstring>(Time, G, US, param_file, diag, CS, MEKE, ADp)</argsstring>
        <name>hor_visc_init</name>
        <param>
          <type>Time</type>
          <defname>Time</defname>
        </param>
        <param>
          <type>G</type>
          <defname>G</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>CS</type>
          <defname>CS</defname>
        </param>
        <param>
          <type>MEKE</type>
          <defname>MEKE</defname>
        </param>
        <param>
          <type>ADp</type>
          <defname>ADp</defname>
        </param>
        <briefdescription>
<para>Allocates space for and calculates static variables used by <ref refid="namespacemom__hor__visc_1ab3a26095634db15095b980e45137e1f1" kindref="member">horizontal_viscosity()</ref>. hor_visc_init calculates and stores the values of a number of metric functions that are used in <ref refid="namespacemom__hor__visc_1ab3a26095634db15095b980e45137e1f1" kindref="member">horizontal_viscosity()</ref>. </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="inout">g</parametername>
</parameternamelist>
<parameterdescription>
<para>The ocean&apos;s 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>A structure to parse for run-time parameters. </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">diag</parametername>
</parameternamelist>
<parameterdescription>
<para>Structure to regulate diagnostic output. </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>cs</parametername>
</parameternamelist>
<parameterdescription>
<para>Pointer to the control structure for this module </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>meke</parametername>
</parameternamelist>
<parameterdescription>
<para>MEKE data </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>adp</parametername>
</parameternamelist>
<parameterdescription>
<para>Acceleration diagnostic pointers </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/parameterizations/lateral/MOM_hor_visc.F90" line="1417" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/parameterizations/lateral/MOM_hor_visc.F90" bodystart="1418" bodyend="2171"/>
        <references refid="namespacemom__hor__visc_1abbd712954c311516d28c7d6a46e6c381" compoundref="MOM__hor__visc_8F90" startline="2176" endline="2187">align_aniso_tensor_to_grid</references>
        <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_1a3995d7e0c8fb36abdc7166ea4fe586d1" compoundref="MOM__dynamics__split__RK2_8F90" startline="1077" endline="1438">mom_dynamics_split_rk2::initialize_dyn_split_rk2</referencedby>
        <referencedby refid="namespacemom__dynamics__unsplit_1aa428b0ad5ed3e6cbbb1fd83484eba2f8" compoundref="MOM__dynamics__unsplit_8F90" startline="560" endline="704">mom_dynamics_unsplit::initialize_dyn_unsplit</referencedby>
        <referencedby refid="namespacemom__dynamics__unsplit__rk2_1a900ac5cb7e63b6b9872123de94f147d7" compoundref="MOM__dynamics__unsplit__RK2_8F90" startline="508" endline="661">mom_dynamics_unsplit_rk2::initialize_dyn_unsplit_rk2</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespacemom__hor__visc_1abbd712954c311516d28c7d6a46e6c381" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine</type>
        <definition>subroutine mom_hor_visc::align_aniso_tensor_to_grid</definition>
        <argsstring>(CS, n1, n2)</argsstring>
        <name>align_aniso_tensor_to_grid</name>
        <param>
          <type>CS</type>
          <defname>CS</defname>
        </param>
        <param>
          <type>n1</type>
          <defname>n1</defname>
        </param>
        <param>
          <type>n2</type>
          <defname>n2</defname>
        </param>
        <briefdescription>
<para>Calculates factors in the anisotropic orientation tensor to be align with the grid. With n1=1 and n2=0, this recovers the approach of Large et al, 2001. </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername>cs</parametername>
</parameternamelist>
<parameterdescription>
<para>Control structure for horizontal viscosity </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">n1</parametername>
</parameternamelist>
<parameterdescription>
<para>i-component of direction vector [nondim] </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">n2</parametername>
</parameternamelist>
<parameterdescription>
<para>j-component of direction vector [nondim] </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/parameterizations/lateral/MOM_hor_visc.F90" line="2175" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/parameterizations/lateral/MOM_hor_visc.F90" bodystart="2176" bodyend="2187"/>
        <referencedby refid="namespacemom__hor__visc_1ae9e2abbb7908dbd548c8f6ce335c5303" compoundref="MOM__hor__visc_8F90" startline="1418" endline="2171">hor_visc_init</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespacemom__hor__visc_1a686fed1d7dd5311ab016b6f637aa7304" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine</type>
        <definition>subroutine mom_hor_visc::smooth_gme</definition>
        <argsstring>(CS, G, GME_flux_h, GME_flux_q)</argsstring>
        <name>smooth_gme</name>
        <param>
          <type>CS</type>
          <defname>CS</defname>
        </param>
        <param>
          <type>G</type>
          <defname>G</defname>
        </param>
        <param>
          <type>GME_flux_h</type>
          <defname>GME_flux_h</defname>
        </param>
        <param>
          <type>GME_flux_q</type>
          <defname>GME_flux_q</defname>
        </param>
        <briefdescription>
<para>Apply a 1-1-4-1-1 Laplacian filter one time on GME diffusive flux to reduce any horizontal two-grid-point noise. </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername>cs</parametername>
</parameternamelist>
<parameterdescription>
<para>Control structure </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">g</parametername>
</parameternamelist>
<parameterdescription>
<para>Ocean grid </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">gme_flux_h</parametername>
</parameternamelist>
<parameterdescription>
<para>GME diffusive flux at h points </para>
</parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">gme_flux_q</parametername>
</parameternamelist>
<parameterdescription>
<para>GME diffusive flux at q points </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/parameterizations/lateral/MOM_hor_visc.F90" line="2191" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/parameterizations/lateral/MOM_hor_visc.F90" bodystart="2192" bodyend="2249"/>
        <referencedby refid="namespacemom__hor__visc_1ab3a26095634db15095b980e45137e1f1" compoundref="MOM__hor__visc_8F90" startline="217" endline="1411">horizontal_viscosity</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespacemom__hor__visc_1a677ff53dc44cfbf175d9d02627aa92fd" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine, public</type>
        <definition>subroutine, public mom_hor_visc::hor_visc_end</definition>
        <argsstring>(CS)</argsstring>
        <name>hor_visc_end</name>
        <param>
          <type>CS</type>
          <defname>CS</defname>
        </param>
        <briefdescription>
<para>Deallocates any variables allocated in hor_visc_init. </para>
        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername>cs</parametername>
</parameternamelist>
<parameterdescription>
<para>The control structure returned by a previous call to hor_visc_init. </para>
</parameterdescription>
</parameteritem>
</parameterlist>
</para>
        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/parameterizations/lateral/MOM_hor_visc.F90" line="2252" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/parameterizations/lateral/MOM_hor_visc.F90" bodystart="2253" bodyend="2297"/>
      </memberdef>
      </sectiondef>
    <briefdescription>
<para>Calculates horizontal viscosity and viscous stresses. </para>
    </briefdescription>
    <detaileddescription>
<para>This module contains the subroutine <ref refid="namespacemom__hor__visc_1ab3a26095634db15095b980e45137e1f1" kindref="member">horizontal_viscosity()</ref> that calculates the effects of horizontal viscosity, including parameterizations of the value of the viscosity itself. <ref refid="namespacemom__hor__visc_1ab3a26095634db15095b980e45137e1f1" kindref="member">horizontal_viscosity()</ref> calculates the acceleration due to some combination of a biharmonic viscosity and a Laplacian viscosity. Either or both may use a coefficient that depends on the shear and strain of the flow. All metric terms are retained. The Laplacian is calculated as the divergence of a stress tensor, using the form suggested by Smagorinsky (1993). The biharmonic is calculated by twice applying the divergence of the stress tensor that is used to calculate the Laplacian, but without the dependence on thickness in the first pass. This form permits a variable viscosity, and indicates no acceleration for either resting fluid or solid body rotation.</para>
<para>The form of the viscous accelerations is discussed extensively in Griffies and Hallberg (2000), and the implementation here follows that discussion closely. We use the notation of Smith and McWilliams (2003) with the exception that the isotropic viscosity is <formula id="242">$\kappa_h$</formula>.</para>
<sect1 id="namespacemom__hor__visc_1section_horizontal_viscosity">
<title>Horizontal viscosity in MOM</title>
<para>In general, the horizontal stress tensor can be written as <formula id="243">\[ {\bf \sigma} = \begin{pmatrix} \frac{1}{2} \left( \sigma_D + \sigma_T \right) &amp; \frac{1}{2} \sigma_S \\\\ \frac{1}{2} \sigma_S &amp; \frac{1}{2} \left( \sigma_D - \sigma_T \right) \end{pmatrix} \]</formula> where <formula id="244">$\sigma_D$</formula>, <formula id="245">$\sigma_T$</formula> and <formula id="246">$\sigma_S$</formula> are stresses associated with invariant factors in the strain-rate tensor. For a Newtonian fluid, the stress tensor is usually linearly related to the strain-rate tensor. The horizontal strain-rate tensor is <formula id="247">\[ \dot{\bf e} = \begin{pmatrix} \frac{1}{2} \left( \dot{e}_D + \dot{e}_T \right) &amp; \frac{1}{2} \dot{e}_S \\\\ \frac{1}{2} \dot{e}_S &amp; \frac{1}{2} \left( \dot{e}_D - \dot{e}_T \right) \end{pmatrix} \]</formula> where <formula id="248">$\dot{e}_D = \partial_x u + \partial_y v$</formula> is the horizontal divergence, <formula id="249">$\dot{e}_T = \partial_x u - \partial_y v$</formula> is the horizontal tension, and <formula id="250">$\dot{e}_S = \partial_y u + \partial_x v$</formula> is the horizontal shear strain.</para>
<para>The trace of the stress tensor, <formula id="251">$tr(\bf \sigma) = \sigma_D$</formula>, is usually absorbed into the pressure and only the deviatoric stress tensor considered. From here on, we drop <formula id="244">$\sigma_D$</formula>. The trace of the strain tensor, <formula id="252">$tr(\bf e) = \dot{e}_D$</formula> is non-zero for horizontally divergent flow but only enters the stress tensor through <formula id="244">$\sigma_D$</formula> and so we will drop <formula id="244">$\sigma_D$</formula> from calculations of the strain tensor in the code. Therefore the horizontal stress tensor can be considered to be <formula id="253">\[ {\bf \sigma} = \begin{pmatrix} \frac{1}{2} \sigma_T &amp; \frac{1}{2} \sigma_S \\\\ \frac{1}{2} \sigma_S &amp; - \frac{1}{2} \sigma_T \end{pmatrix} .\]</formula></para>
<para>The stresses above are linearly related to the strain through a viscosity coefficient, <formula id="242">$\kappa_h$</formula>: <formula id="254">\begin{eqnarray*} \sigma_T &amp; = &amp; 2 \kappa_h \dot{e}_T \\\\ \sigma_S &amp; = &amp; 2 \kappa_h \dot{e}_S . \end{eqnarray*}</formula></para>
<para>The viscosity <formula id="242">$\kappa_h$</formula> may either be a constant or variable. For example, <formula id="242">$\kappa_h$</formula> may vary with the shear, as proposed by Smagorinsky (1993).</para>
<para>The accelerations resulting form the divergence of the stress tensor are <formula id="255">\begin{eqnarray*} \hat{\bf x} \cdot \left( \nabla \cdot {\bf \sigma} \right) &amp; = &amp; \partial_x \left( \frac{1}{2} \sigma_T \right) + \partial_y \left( \frac{1}{2} \sigma_S \right) \\\\ &amp; = &amp; \partial_x \left( \kappa_h \dot{e}_T \right) + \partial_y \left( \kappa_h \dot{e}_S \right) \\\\ \hat{\bf y} \cdot \left( \nabla \cdot {\bf \sigma} \right) &amp; = &amp; \partial_x \left( \frac{1}{2} \sigma_S \right) + \partial_y \left( \frac{1}{2} \sigma_T \right) \\\\ &amp; = &amp; \partial_x \left( \kappa_h \dot{e}_S \right) + \partial_y \left( - \kappa_h \dot{e}_T \right) . \end{eqnarray*}</formula></para>
<para>The form of the Laplacian viscosity in general coordinates is: <formula id="256">\begin{eqnarray*} \hat{\bf x} \cdot \left( \nabla \cdot \sigma \right) &amp; = &amp; \frac{1}{h} \left[ \partial_x \left( \kappa_h h \dot{e}_T \right) + \partial_y \left( \kappa_h h \dot{e}_S \right) \right] \\\\ \hat{\bf y} \cdot \left( \nabla \cdot \sigma \right) &amp; = &amp; \frac{1}{h} \left[ \partial_x \left( \kappa_h h \dot{e}_S \right) - \partial_y \left( \kappa_h h \dot{e}_T \right) \right] . \end{eqnarray*}</formula></para>
<sect2 id="namespacemom__hor__visc_1section_laplacian_viscosity_coefficient">
<title>Laplacian viscosity coefficient</title>
<para>The horizontal viscosity coefficient, <formula id="242">$\kappa_h$</formula>, can have multiple components. The isotropic components are:<itemizedlist>
<listitem><para>A uniform background component, <formula id="257">$\kappa_{bg}$</formula>.</para>
</listitem><listitem><para>A constant but spatially variable 2D map, <formula id="258">$\kappa_{2d}(x,y)$</formula>.</para>
</listitem><listitem><para>A &apos;&apos;MICOM&apos;&apos; viscosity, <formula id="259">$U_\nu \Delta(x,y)$</formula>, which uses a constant velocity scale, <formula id="260">$U_\nu$</formula> and a measure of the grid-spacing <formula id="261">$\Delta(x,y)^2 = \frac{2 \Delta x^2 \Delta y^2}{\Delta x^2 + \Delta y^2}$</formula>.</para>
</listitem><listitem><para>A function of latitude, <formula id="262">$\kappa_{\phi}(x,y) = \kappa_{\pi/2} |\sin(\phi)|^n$</formula>.</para>
</listitem><listitem><para>A dynamic Smagorinsky viscosity, <formula id="263">$\kappa_{Sm}(x,y,t) = C_{Sm} \Delta^2 \sqrt{\dot{e}_T^2 + \dot{e}_S^2}$</formula>.</para>
</listitem><listitem><para>A dynamic Leith viscosity, <formula id="264">$\kappa_{Lth}(x,y,t) = C_{Lth} \Delta^3 \sqrt{|\nabla \zeta|^2 + |\nabla \dot{e}_D|^2}$</formula>.</para>
</listitem></itemizedlist>
</para>
<para>A maximum stable viscosity, <formula id="265">$\kappa_{max}(x,y)$</formula> is calculated based on the grid-spacing and time-step and used to clip calculated viscosities.</para>
<para>The static components of <formula id="242">$\kappa_h$</formula> are first combined as follows: <formula id="266">\[ \kappa_{static} = \min \left[ \max\left( \kappa_{bg}, U_\nu \Delta(x,y), \kappa_{2d}(x,y), \kappa_\phi(x,y) \right) , \kappa_{max}(x,y) \right] \]</formula> and stored in the module control structure as variables <computeroutput>Kh_bg_xx</computeroutput> and <computeroutput>Kh_bg_xy</computeroutput> for the tension (h-points) and shear (q-points) components respectively.</para>
<para>The full viscosity includes the dynamic components as follows: <formula id="267">\[ \kappa_h(x,y,t) = r(\Delta,L_d) \max \left( \kappa_{static}, \kappa_{Sm}, \kappa_{Lth} \right) \]</formula> where <formula id="268">$r(\Delta,L_d)$</formula> is a resolution function.</para>
<para>The dynamic Smagorinsky and Leith viscosity schemes are exclusive with each other.</para>
</sect2>
<sect2 id="namespacemom__hor__visc_1section_viscous_boundary_conditions">
<title>Viscous boundary conditions</title>
<para>Free slip boundary conditions have been coded, although no slip boundary conditions can be used with the Laplacian viscosity based on the 2D land-sea mask. For a western boundary, for example, the boundary conditions with the biharmonic operator would be written as: <formula id="269">\[ \partial_x v = 0 ; \partial_x^3 v = 0 ; u = 0 ; \partial_x^2 u = 0 , \]</formula> while for a Laplacian operator, they are simply <formula id="270">\[ \partial_x v = 0 ; u = 0 . \]</formula> These boundary conditions are largely dictated by the use of an Arakawa C-grid and by the varying layer thickness.</para>
</sect2>
<sect2 id="namespacemom__hor__visc_1section_anisotropic_viscosity">
<title>Anisotropic viscosity</title>
<para>Large et al., 2001, proposed enhancing viscosity in a particular direction and the approach was generalized in Smith and McWilliams, 2003. We use the second form of their two coefficient anisotropic viscosity (section 4.3). We also replace their <formula id="271">$A^\prime$</formula> and $D$ such that <formula id="272">$2A^\prime = 2 \kappa_h + D$</formula> and <formula id="273">$\kappa_a = D$</formula> so that <formula id="242">$\kappa_h$</formula> can be considered the isotropic viscosity and <formula id="274">$\kappa_a=D$</formula> can be consider the anisotropic viscosity. The direction of anisotropy is defined by a unit vector <formula id="275">$\hat{\bf n}=(n_1,n_2)$</formula>.</para>
<para>The contributions to the stress tensor are <formula id="276">\[ \begin{pmatrix} \sigma_T \\\\ \sigma_S \end{pmatrix} = \left[ \begin{pmatrix} 2 \kappa_h + \kappa_a &amp; 0 \\\\ 0 &amp; 2 \kappa_h \end{pmatrix} + 2 \kappa_a n_1 n_2 \begin{pmatrix} - 2 n_1 n_2 &amp; n_1^2 - n_2^2 \\\\ n_1^2 - n_2^2 &amp; 2 n_1 n_2 \end{pmatrix} \right] \begin{pmatrix} \dot{e}_T \\\\ \dot{e}_S \end{pmatrix} \]</formula> Dissipation of kinetic energy requires <formula id="277">$\kappa_h \geq 0$</formula> and <formula id="278">$2 \kappa_h + \kappa_a \geq 0$</formula>. Note that when anisotropy is aligned with the x-direction, <formula id="279">$n_1 = \pm 1$</formula>, then <formula id="280">$n_2 = 0$</formula> and the cross terms vanish. The accelerations in this aligned limit with constant coefficients become <formula id="281">\begin{eqnarray*} \hat{\bf x} \cdot \nabla \cdot {\bf \sigma} &amp; = &amp; \partial_x \left( \left( \kappa_h + \frac{1}{2} \kappa_a \right) \dot{e}_T \right) + \partial_y \left( \kappa_h \dot{e}_S \right) \\\\ &amp; = &amp; \left( \kappa_h + \kappa_a \right) \partial_{xx} u + \kappa_h \partial_{yy} u - \frac{1}{2} \kappa_a \partial_x \left( \partial_x u + \partial_y v \right) \\\\ \hat{\bf y} \cdot \nabla \cdot {\bf \sigma} &amp; = &amp; \partial_x \left( \kappa_h \dot{e}_S \right) - \partial_y \left( \left( \kappa_h + \frac{1}{2} \kappa_a \right) \dot{e}_T \right) \\\\ &amp; = &amp; \kappa_h \partial_{xx} v + \left( \kappa_h + \kappa_a \right) \partial_{yy} v - \frac{1}{2} \kappa_a \partial_y \left( \partial_x u + \partial_y v \right) \end{eqnarray*}</formula> which has contributions akin to a negative divergence damping (a divergence enhancement?) but which is weaker than the enhanced tension terms by half.</para>
</sect2>
<sect2 id="namespacemom__hor__visc_1section_viscous_discretization">
<title>Discretization</title>
<para>The horizontal tension, <formula id="282">$\dot{e}_T$</formula>, is stored in variable <computeroutput>sh_xx</computeroutput> and discretized as <formula id="283">\[ \dot{e}_T = \frac{\Delta y}{\Delta x} \delta_i \left( \frac{1}{\Delta y} u \right) - \frac{\Delta x}{\Delta y} \delta_j \left( \frac{1}{\Delta x} v \right) . \]</formula> The horizontal divergent strain, <formula id="284">$\dot{e}_D$</formula>, is stored in variable <computeroutput>div_xx</computeroutput> and discretized as <formula id="285">\[ \dot{e}_D = \frac{1}{h A} \left( \delta_i \left( \overline{h}^i \Delta y \, u \right) + \delta_j \left( \overline{h}^j\Delta x \, v \right) \right) . \]</formula> Note that for expediency this is the exact discretization used in the continuity equation.</para>
<para>The horizontal shear strain, <formula id="286">$\dot{e}_S$</formula>, is stored in variable <computeroutput>sh_xy</computeroutput> and discretized as <formula id="287">\[ \dot{e}_S = v_x + u_y \]</formula> where <formula id="288">\begin{align*} v_x &amp;= \frac{\Delta y}{\Delta x} \delta_i \left( \frac{1}{\Delta y} v \right) \\\\ u_y &amp;= \frac{\Delta x}{\Delta y} \delta_j \left( \frac{1}{\Delta x} u \right) \end{align*}</formula> which are calculated separately so that no-slip or free-slip boundary conditions can be applied to <formula id="289">$v_x$</formula> and <formula id="290">$u_y$</formula> where appropriate.</para>
<para>The tendency for the x-component of the divergence of stress is stored in variable <computeroutput>diffu</computeroutput> and discretized as <formula id="291">\[ \hat{\bf x} \cdot \left( \nabla \cdot {\bf \sigma} \right) = \frac{1}{A \overline{h}^i} \left( \frac{1}{\Delta y} \delta_i \left( h \Delta y^2 \kappa_h \dot{e}_T \right) + \frac{1}{\Delta x} \delta_j \left( \tilde{h}^{ij} \Delta x^2 \kappa_h \dot{e}_S \right) \right) . \]</formula></para>
<para>The tendency for the y-component of the divergence of stress is stored in variable <computeroutput>diffv</computeroutput> and discretized as <formula id="292">\[ \hat{\bf y} \cdot \left( \nabla \cdot {\bf \sigma} \right) = \frac{1}{A \overline{h}^j} \left( \frac{1}{\Delta y} \delta_i \left( \tilde{h}^{ij} \Delta y^2 A_M \dot{e}_S \right) - \frac{1}{\Delta x} \delta_j \left( h \Delta x^2 A_M \dot{e}_T \right) \right) . \]</formula></para>
</sect2>
<sect2 id="namespacemom__hor__visc_1section_viscous_refs">
<title>References</title>
<para>Griffies, S.M., and Hallberg, R.W., 2000: Biharmonic friction with a Smagorinsky-like viscosity for use in large-scale eddy-permitting ocean models. Monthly Weather Review, 128(8), 2935-2946. <ulink url="https://doi.org/10.1175/1520-0493(2000)128%3C2935:BFWASL%3E2.0.CO;2">https://doi.org/10.1175/1520-0493(2000)128%3C2935:BFWASL%3E2.0.CO;2</ulink></para>
<para>Large, W.G., Danabasoglu, G., McWilliams, J.C., Gent, P.R. and Bryan, F.O., 2001: Equatorial circulation of a global ocean climate model with anisotropic horizontal viscosity. Journal of Physical Oceanography, 31(2), pp.518-536. <ulink url="https://doi.org/10.1175/1520-0485(2001)031%3C0518:ECOAGO%3E2.0.CO;2">https://doi.org/10.1175/1520-0485(2001)031%3C0518:ECOAGO%3E2.0.CO;2</ulink></para>
<para>Smagorinsky, J., 1993: Some historical remarks on the use of nonlinear viscosities. Large eddy simulation of complex engineering and geophysical flows, 1, 69-106.</para>
<para>Smith, R.D., and McWilliams, J.C., 2003: Anisotropic horizontal viscosity for ocean models. Ocean Modelling, 5(2), 129-156. <ulink url="https://doi.org/10.1016/S1463-5003(02)00016-1">https://doi.org/10.1016/S1463-5003(02)00016-1</ulink> </para>
</sect2>
</sect1>
    </detaileddescription>
    <location file="/home/cermak/src/MOM6.devrob/src/parameterizations/lateral/MOM_hor_visc.F90" line="2" column="1"/>
  </compounddef>
</doxygen>
