<?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.14">
  <compounddef id="namespaceregrid__solvers" kind="namespace" language="Fortran">
    <compoundname>regrid_solvers</compoundname>
      <sectiondef kind="func">
      <memberdef kind="function" id="namespaceregrid__solvers_1a36827238948de49ff0dd0be54cfaf719" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine, public</type>
        <definition>subroutine, public regrid_solvers::solve_linear_system</definition>
        <argsstring>(A, R, X, N, answers_2018)</argsstring>
        <name>solve_linear_system</name>
        <param>
          <type>A</type>
          <defname>A</defname>
        </param>
        <param>
          <type>R</type>
          <defname>R</defname>
        </param>
        <param>
          <type>X</type>
          <defname>X</defname>
        </param>
        <param>
          <type>N</type>
          <defname>N</defname>
        </param>
        <param>
          <type>answers_2018</type>
          <defname>answers_2018</defname>
        </param>
        <briefdescription>
<para>Solve the linear system AX = R by Gaussian elimination. </para>        </briefdescription>
        <detaileddescription>
<para>This routine uses Gauss&apos;s algorithm to transform the system&apos;s original matrix into an upper triangular matrix. Back substitution yields the answer. The matrix A must be square, with the first index varing down the column.</para><para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="in">n</parametername>
</parameternamelist>
<parameterdescription>
<para>The size of the system</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">a</parametername>
</parameternamelist>
<parameterdescription>
<para>The matrix being inverted [nondim]</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">r</parametername>
</parameternamelist>
<parameterdescription>
<para>system right-hand side [A]</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">x</parametername>
</parameternamelist>
<parameterdescription>
<para>solution vector [A]</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">answers_2018</parametername>
</parameternamelist>
<parameterdescription>
<para>If true or absent use older, less efficient expressions. </para></parameterdescription>
</parameteritem>
</parameterlist>
</para>        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/ALE/regrid_solvers.F90" line="19" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/ALE/regrid_solvers.F90" bodystart="20" bodyend="103"/>
        <references refid="namespacemom__error__handler_1a460cfb79a06c29fc249952c2a3710d67" compoundref="MOM__error__handler_8F90" startline="72" endline="92">mom_error_handler::mom_error</references>
        <referencedby refid="namespaceregrid__edge__values_1ac33bba0097d34e462abda17e78847862" compoundref="regrid__edge__values_8F90" startline="697" endline="860">regrid_edge_values::edge_slopes_implicit_h3</referencedby>
        <referencedby refid="namespaceregrid__edge__values_1a2fa3a70b208abe68f29bef9589081209" compoundref="regrid__edge__values_8F90" startline="222" endline="357">regrid_edge_values::edge_values_explicit_h4</referencedby>
        <referencedby refid="namespaceregrid__edge__values_1a0c268712aaf87b3597cef51c85fb32cb" compoundref="regrid__edge__values_8F90" startline="387" endline="545">regrid_edge_values::edge_values_implicit_h4</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespaceregrid__solvers_1a2ed09d1e0857610eb3638601e20d2a2c" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine, public</type>
        <definition>subroutine, public regrid_solvers::linear_solver</definition>
        <argsstring>(N, A, R, X)</argsstring>
        <name>linear_solver</name>
        <param>
          <type>N</type>
          <defname>N</defname>
        </param>
        <param>
          <type>A</type>
          <defname>A</defname>
        </param>
        <param>
          <type>R</type>
          <defname>R</defname>
        </param>
        <param>
          <type>X</type>
          <defname>X</defname>
        </param>
        <briefdescription>
<para>Solve the linear system AX = R by Gaussian elimination. </para>        </briefdescription>
        <detaileddescription>
<para>This routine uses Gauss&apos;s algorithm to transform the system&apos;s original matrix into an upper triangular matrix. Back substitution then yields the answer. The matrix A must be square, with the first index varing along the row.</para><para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="in">n</parametername>
</parameternamelist>
<parameterdescription>
<para>The size of the system</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">a</parametername>
</parameternamelist>
<parameterdescription>
<para>The matrix being inverted [nondim]</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">r</parametername>
</parameternamelist>
<parameterdescription>
<para>system right-hand side [A]</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="inout">x</parametername>
</parameternamelist>
<parameterdescription>
<para>solution vector [A] </para></parameterdescription>
</parameteritem>
</parameterlist>
</para>        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/ALE/regrid_solvers.F90" line="111" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/ALE/regrid_solvers.F90" bodystart="112" bodyend="164"/>
        <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="namespaceregrid__solvers_1aac4382af38975d9cfcfd6b00adafaeab" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine, public</type>
        <definition>subroutine, public regrid_solvers::solve_tridiagonal_system</definition>
        <argsstring>(Al, Ad, Au, R, X, N, answers_2018)</argsstring>
        <name>solve_tridiagonal_system</name>
        <param>
          <type>Al</type>
          <defname>Al</defname>
        </param>
        <param>
          <type>Ad</type>
          <defname>Ad</defname>
        </param>
        <param>
          <type>Au</type>
          <defname>Au</defname>
        </param>
        <param>
          <type>R</type>
          <defname>R</defname>
        </param>
        <param>
          <type>X</type>
          <defname>X</defname>
        </param>
        <param>
          <type>N</type>
          <defname>N</defname>
        </param>
        <param>
          <type>answers_2018</type>
          <defname>answers_2018</defname>
        </param>
        <briefdescription>
<para>Solve the tridiagonal system AX = R. </para>        </briefdescription>
        <detaileddescription>
<para>This routine uses Thomas&apos;s algorithm to solve the tridiagonal system AX = R. (A is made up of lower, middle and upper diagonals)</para><para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="in">n</parametername>
</parameternamelist>
<parameterdescription>
<para>The size of the system</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">ad</parametername>
</parameternamelist>
<parameterdescription>
<para>Matrix center diagonal</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">al</parametername>
</parameternamelist>
<parameterdescription>
<para>Matrix lower diagonal</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">au</parametername>
</parameternamelist>
<parameterdescription>
<para>Matrix upper diagonal</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">r</parametername>
</parameternamelist>
<parameterdescription>
<para>system right-hand side</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="out">x</parametername>
</parameternamelist>
<parameterdescription>
<para>solution vector</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">answers_2018</parametername>
</parameternamelist>
<parameterdescription>
<para>If true use older, less acccurate expressions. </para></parameterdescription>
</parameteritem>
</parameterlist>
</para>        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/ALE/regrid_solvers.F90" line="172" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/ALE/regrid_solvers.F90" bodystart="173" bodyend="223"/>
        <referencedby refid="namespaceregrid__edge__values_1ac33bba0097d34e462abda17e78847862" compoundref="regrid__edge__values_8F90" startline="697" endline="860">regrid_edge_values::edge_slopes_implicit_h3</referencedby>
        <referencedby refid="namespaceregrid__edge__values_1a7c3fb27d99df9e3594ff32d1d03e1b34" compoundref="regrid__edge__values_8F90" startline="867" endline="1097">regrid_edge_values::edge_slopes_implicit_h5</referencedby>
        <referencedby refid="namespaceregrid__edge__values_1a0c268712aaf87b3597cef51c85fb32cb" compoundref="regrid__edge__values_8F90" startline="387" endline="545">regrid_edge_values::edge_values_implicit_h4</referencedby>
        <referencedby refid="namespaceregrid__edge__values_1a9955c45dcd1bfec32fbf5602315cb5b1" compoundref="regrid__edge__values_8F90" startline="1137" endline="1330">regrid_edge_values::edge_values_implicit_h6</referencedby>
      </memberdef>
      <memberdef kind="function" id="namespaceregrid__solvers_1a3f1d27aaab0a19c9abd07c96bb704bb6" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
        <type>subroutine, public</type>
        <definition>subroutine, public regrid_solvers::solve_diag_dominant_tridiag</definition>
        <argsstring>(Al, Ac, Au, R, X, N)</argsstring>
        <name>solve_diag_dominant_tridiag</name>
        <param>
          <type>Al</type>
          <defname>Al</defname>
        </param>
        <param>
          <type>Ac</type>
          <defname>Ac</defname>
        </param>
        <param>
          <type>Au</type>
          <defname>Au</defname>
        </param>
        <param>
          <type>R</type>
          <defname>R</defname>
        </param>
        <param>
          <type>X</type>
          <defname>X</defname>
        </param>
        <param>
          <type>N</type>
          <defname>N</defname>
        </param>
        <briefdescription>
<para>Solve the tridiagonal system AX = R. </para>        </briefdescription>
        <detaileddescription>
<para>This routine uses a variant of Thomas&apos;s algorithm to solve the tridiagonal system AX = R, in a form that is guaranteed to avoid dividing by a zero pivot. The matrix A is made up of lower (Al) and upper diagonals (Au) and a central diagonal Ad = Ac+Al+Au, where Al, Au, and Ac are all positive (or negative) definite. However when Ac is smaller than roundoff compared with (Al+Au), the answers are prone to inaccuracy.</para><para><parameterlist kind="param"><parameteritem>
<parameternamelist>
<parametername direction="in">n</parametername>
</parameternamelist>
<parameterdescription>
<para>The size of the system</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">ac</parametername>
</parameternamelist>
<parameterdescription>
<para>Matrix center diagonal offset from Al + Au</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">al</parametername>
</parameternamelist>
<parameterdescription>
<para>Matrix lower diagonal</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">au</parametername>
</parameternamelist>
<parameterdescription>
<para>Matrix upper diagonal</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="in">r</parametername>
</parameternamelist>
<parameterdescription>
<para>system right-hand side</para></parameterdescription>
</parameteritem>
<parameteritem>
<parameternamelist>
<parametername direction="out">x</parametername>
</parameternamelist>
<parameterdescription>
<para>solution vector </para></parameterdescription>
</parameteritem>
</parameterlist>
</para>        </detaileddescription>
        <inbodydescription>
        </inbodydescription>
        <location file="/home/cermak/src/MOM6.devrob/src/ALE/regrid_solvers.F90" line="234" column="1" bodyfile="/home/cermak/src/MOM6.devrob/src/ALE/regrid_solvers.F90" bodystart="235" bodyend="267"/>
      </memberdef>
      </sectiondef>
    <briefdescription>
<para>Solvers of linear systems. </para>    </briefdescription>
    <detaileddescription>
<para>Date of creation: 2008.06.12 L. White.</para><para>This module contains solvers of linear systems. These routines have now been updated for greater efficiency, especially in special cases. </para>    </detaileddescription>
    <location file="/home/cermak/src/MOM6.devrob/src/ALE/regrid_solvers.F90" line="2" column="1"/>
  </compounddef>
</doxygen>
