<?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.13">
  <compounddef id="namespacemom__controlled__forcing" kind="namespace" language="Fortran">
    <compoundname>mom_controlled_forcing</compoundname>
    <innerclass refid="structmom__controlled__forcing_1_1ctrl__forcing__cs" prot="public">mom_controlled_forcing::ctrl_forcing_cs</innerclass>
      <sectiondef kind="func">
      <memberdef kind="function" id="namespacemom__controlled__forcing_1a3428c4ca0349d4aad6f5523ffa45f39f" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine, public</type>
        <definition>subroutine, public mom_controlled_forcing::apply_ctrl_forcing</definition>
        <argsstring>(SST_anom, SSS_anom, SSS_mean, virt_heat, virt_precip, day_start, dt, G, US, CS)</argsstring>
        <name>apply_ctrl_forcing</name>
        <param>
          <type>SST_anom</type>
          <defname>SST_anom</defname>
        </param>
        <param>
          <type>SSS_anom</type>
          <defname>SSS_anom</defname>
        </param>
        <param>
          <type>SSS_mean</type>
          <defname>SSS_mean</defname>
        </param>
        <param>
          <type>virt_heat</type>
          <defname>virt_heat</defname>
        </param>
        <param>
          <type>virt_precip</type>
          <defname>virt_precip</defname>
        </param>
        <param>
          <type>day_start</type>
          <defname>day_start</defname>
        </param>
        <param>
          <type>dt</type>
          <defname>dt</defname>
        </param>
        <param>
          <type>G</type>
          <defname>G</defname>
        </param>
        <param>
          <type>US</type>
          <defname>US</defname>
        </param>
        <param>
          <type>CS</type>
          <defname>CS</defname>
        </param>
        <briefdescription>
<para>This subroutine calls any of the other subroutines in this file that are needed to specify the current surface forcing fields. </para>        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="inout">g</parametername>
</parameternamelist>
<parameterdescription>
<para>The ocean&apos;s grid structure.</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">sst_anom</parametername>
</parameternamelist>
<parameterdescription>
<para>The sea surface temperature anomalies [degC].</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">sss_anom</parametername>
</parameternamelist>
<parameterdescription>
<para>The sea surface salinity anomlies [ppt].</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">sss_mean</parametername>
</parameternamelist>
<parameterdescription>
<para>The mean sea surface salinity [ppt].</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">virt_heat</parametername>
</parameternamelist>
<parameterdescription>
<para>Virtual (corrective) heat fluxes that are augmented in this subroutine [W m-2].</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">virt_precip</parametername>
</parameternamelist>
<parameterdescription>
<para>Virtual (corrective) precipitation fluxes that are augmented in this subroutine [kg m-2 s-1].</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">day_start</parametername>
</parameternamelist>
<parameterdescription>
<para>Start time of the fluxes.</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">dt</parametername>
</parameternamelist>
<parameterdescription>
<para>Length of time over which these fluxes will be applied [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>A pointer to the control structure returned by a previous call to ctrl_forcing_init. </para></parameterdescription>
</parameteritem>
</parameterlist>
</para>        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/user/MOM_controlled_forcing.F90" line="81" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/user/MOM_controlled_forcing.F90" bodystart="83" bodyend="372"/>
        <references refid="namespacemom__error__handler_1a460cfb79a06c29fc249952c2a3710d67" compoundref="MOM__error__handler_8F90" startline="72" endline="92">mom_error_handler::mom_error</references>
        <references refid="namespacemom__controlled__forcing_1a610583f048e5478ad2cd608dd5de8e00" compoundref="MOM__controlled__forcing_8F90" startline="377" endline="386">periodic_int</references>
        <references refid="namespacemom__controlled__forcing_1a61d129cf3590af06823330a566d23fd6" compoundref="MOM__controlled__forcing_8F90" startline="392" endline="401">periodic_real</references>
        <references refid="namespacemom__time__manager_1ae2d8736d03ab62310f32ddf01e44a961" compoundref="MOM__time__manager_8F90" startline="47" endline="60">mom_time_manager::real_to_time</references>
      </memberdef>
      <memberdef kind="function" id="namespacemom__controlled__forcing_1a610583f048e5478ad2cd608dd5de8e00" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>integer function</type>
        <definition>integer function mom_controlled_forcing::periodic_int</definition>
        <argsstring>(rval, num_period)</argsstring>
        <name>periodic_int</name>
        <param>
          <type>rval</type>
          <defname>rval</defname>
        </param>
        <param>
          <type>num_period</type>
          <defname>num_period</defname>
        </param>
        <briefdescription>
<para>This function maps rval into an integer in the range from 1 to num_period. </para>        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="in">rval</parametername>
</parameternamelist>
<parameterdescription>
<para>Input for mapping.</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">num_period</parametername>
</parameternamelist>
<parameterdescription>
<para>Maximum output.</para></parameterdescription>
</parameteritem>
</parameterlist>
<simplesect kind="return"><para>Return value. </para></simplesect>
</para>        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/user/MOM_controlled_forcing.F90" line="376" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/user/MOM_controlled_forcing.F90" bodystart="377" bodyend="386"/>
        <referencedby refid="namespacemom__controlled__forcing_1a3428c4ca0349d4aad6f5523ffa45f39f" compoundref="MOM__controlled__forcing_8F90" startline="83" endline="372">apply_ctrl_forcing</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespacemom__controlled__forcing_1a61d129cf3590af06823330a566d23fd6" prot="private" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>real function</type>
        <definition>real function mom_controlled_forcing::periodic_real</definition>
        <argsstring>(rval, num_period)</argsstring>
        <name>periodic_real</name>
        <param>
          <type>rval</type>
          <defname>rval</defname>
        </param>
        <param>
          <type>num_period</type>
          <defname>num_period</defname>
        </param>
        <briefdescription>
<para>This function shifts rval by an integer multiple of num_period so that 0 &lt;= val_out &lt; num_period. </para>        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="in">rval</parametername>
</parameternamelist>
<parameterdescription>
<para>Input to be shifted into valid range.</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">num_period</parametername>
</parameternamelist>
<parameterdescription>
<para>Maximum valid value.</para></parameterdescription>
</parameteritem>
</parameterlist>
<simplesect kind="return"><para>Return value. </para></simplesect>
</para>        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/user/MOM_controlled_forcing.F90" line="391" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/user/MOM_controlled_forcing.F90" bodystart="392" bodyend="401"/>
        <referencedby refid="namespacemom__controlled__forcing_1a3428c4ca0349d4aad6f5523ffa45f39f" compoundref="MOM__controlled__forcing_8F90" startline="83" endline="372">apply_ctrl_forcing</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespacemom__controlled__forcing_1a8bfffde62f6a555439eba94884a1fc2e" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine, public</type>
        <definition>subroutine, public mom_controlled_forcing::register_ctrl_forcing_restarts</definition>
        <argsstring>(G, param_file, CS, restart_CS)</argsstring>
        <name>register_ctrl_forcing_restarts</name>
        <param>
          <type>G</type>
          <defname>G</defname>
        </param>
        <param>
          <type>param_file</type>
          <defname>param_file</defname>
        </param>
        <param>
          <type>CS</type>
          <defname>CS</defname>
        </param>
        <param>
          <type>restart_CS</type>
          <defname>restart_CS</defname>
        </param>
        <briefdescription>
<para>This subroutine is used to allocate and register any fields in this module that should be written to or read from the restart file. </para>        </briefdescription>
        <detaileddescription>
<para><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">param_file</parametername>
</parameternamelist>
<parameterdescription>
<para>A structure indicating the open file to parse for model parameter values.</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>cs</parametername>
</parameternamelist>
<parameterdescription>
<para>A pointer that is set to point to the control structure for this module.</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>restart_cs</parametername>
</parameternamelist>
<parameterdescription>
<para>A pointer to the restart control structure. </para></parameterdescription>
</parameteritem>
</parameterlist>
</para>        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/user/MOM_controlled_forcing.F90" line="407" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/user/MOM_controlled_forcing.F90" bodystart="408" bodyend="480"/>
        <references refid="namespacemom__error__handler_1a460cfb79a06c29fc249952c2a3710d67" compoundref="MOM__error__handler_8F90" startline="72" endline="92">mom_error_handler::mom_error</references>
        <references refid="namespacemom__io_1a09be50ad112d6bc134d06d82fcbe1fdc" compoundref="MOM__io_8F90" startline="600" endline="632">mom_io::var_desc</references>
      </memberdef>
      <memberdef kind="function" id="namespacemom__controlled__forcing_1ad6a7f0b55a1a5144ffad5eac879cf72e" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine, public</type>
        <definition>subroutine, public mom_controlled_forcing::controlled_forcing_init</definition>
        <argsstring>(Time, G, param_file, diag, CS)</argsstring>
        <name>controlled_forcing_init</name>
        <param>
          <type>Time</type>
          <defname>Time</defname>
        </param>
        <param>
          <type>G</type>
          <defname>G</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>
        <briefdescription>
<para>Set up this modules control structure. </para>        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="in">time</parametername>
</parameternamelist>
<parameterdescription>
<para>The current model time.</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">g</parametername>
</parameternamelist>
<parameterdescription>
<para>The ocean&apos;s grid structure.</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">param_file</parametername>
</parameternamelist>
<parameterdescription>
<para>A structure indicating the open file to parse for model parameter values.</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">diag</parametername>
</parameternamelist>
<parameterdescription>
<para>A structure that is used to regulate diagnostic output.</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername>cs</parametername>
</parameternamelist>
<parameterdescription>
<para>A pointer that is set to point to the control structure for this module. </para></parameterdescription>
</parameteritem>
</parameterlist>
</para>        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/user/MOM_controlled_forcing.F90" line="484" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/user/MOM_controlled_forcing.F90" bodystart="485" bodyend="560"/>
      </memberdef>
      <memberdef kind="function" id="namespacemom__controlled__forcing_1a901171da887e79ad1a1adaff49370193" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine, public</type>
        <definition>subroutine, public mom_controlled_forcing::controlled_forcing_end</definition>
        <argsstring>(CS)</argsstring>
        <name>controlled_forcing_end</name>
        <param>
          <type>CS</type>
          <defname>CS</defname>
        </param>
        <briefdescription>
<para>Clean up this modules control structure. </para>        </briefdescription>
        <detaileddescription>
<para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername>cs</parametername>
</parameternamelist>
<parameterdescription>
<para>A pointer to the control structure returned by a previous call to controlled_forcing_init, it will be deallocated here. </para></parameterdescription>
</parameteritem>
</parameterlist>
</para>        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/user/MOM_controlled_forcing.F90" line="564" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/user/MOM_controlled_forcing.F90" bodystart="565" bodyend="582"/>
      </memberdef>
      </sectiondef>
    <briefdescription>
<para>Use control-theory to adjust the surface heat flux and precipitation. </para>    </briefdescription>
    <detaileddescription>
<para><verbatim>                                                               *
</verbatim> By Robert Hallberg, July 2011 *<itemizedlist>
<listitem><para>This program contains the subroutines that use control-theory * to adjust the surface heat flux and precipitation, based on the * time-mean or periodically (seasonally) varying anomalies from the * observed state. The techniques behind this are described in * Hallberg and Adcroft (2011, in prep.). *</para></listitem><listitem><para>Macros written all in capital letters are defined in <ref refid="MOM__memory_8h" kindref="compound">MOM_memory.h</ref>. *</para></listitem><listitem><para>A small fragment of the grid is shown below: *</para></listitem><listitem><para>j+1 x ^ x ^ x At x: q * j+1 &gt; o &gt; o &gt; At ^: v, tauy * j x ^ x ^ x At &gt;: u, taux * j &gt; o &gt; o &gt; At o: h, fluxes. * j-1 x ^ x ^ x * i-1 i i+1 At x &amp; ^: * i i+1 At &gt; &amp; o: *</para></listitem><listitem><para>The boundaries always run through q grid points (x). *</para></listitem></itemizedlist>
</para><para>Adjustments are based on the time-mean or periodically (seasonally) varying anomalies from the observed state.</para><para>The techniques behind this are described in Hallberg and Adcroft (2018, in prep.). </para>    </detaileddescription>
    <location file="/home/cermak/src/MOM6.devrob/src/user/MOM_controlled_forcing.F90" line="7" column="1"/>
  </compounddef>
</doxygen>
